Golang调用动态库so

Posted Golang语言社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang调用动态库so相关的知识,希望对你有一定的参考价值。

测试动态库

test_so.h

  1. int test_so_func(int a,int b);

复制代码

test_so.c

  1. #include "test_so.h"

  2. int test_so_func(int a,int b)

  3. {

  4.     return a*b;

  5. }

复制代码

生成so

  1. gcc -shared ./test_so.c -o test_so.so

复制代码

复制so文件到golang项目目录

golang项目目录,建立

load_so.h

  1. int do_test_so_func(int a,int b);

复制代码

load_so.c

  1. #include "load_so.h"

  2. #include <dlfcn.h>


  3. int do_test_so_func(int a,int b)

  4. {

  5.     void* handle;

  6.     typedef int (*FPTR)(int,int);


  7.     handle = dlopen("./test_so.so", 1);

  8.     FPTR fptr = (FPTR)dlsym(handle, "test_so_func");


  9.     int result = (*fptr)(a,b);

  10.     return result;

  11. }

复制代码

test.go

  1. package main


  2. /*

  3. #include "load_so.h"

  4. #cgo LDFLAGS: -ldl

  5. */

  6. import "C"

  7. import "fmt"


  8. func main() {

  9.     fmt.Println("20*30=", C.do_test_so_func(20, 30))

  10.     fmt.Println("hello world")

  11. }

复制代码

以上是关于Golang调用动态库so的主要内容,如果未能解决你的问题,请参考以下文章

如何在golang 中调用c的静态库或者动态库

golang编译so动态库加载失败

Android怎么调用第三方SO动态链接库

golang中调用c的正确姿势

python调用golang编写的动态链接库

Golang调用windows下的dll动态库中的函数