测试动态库

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")