golang调用动态库

zhanlzy · · 3017 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
测试动态库 test_so.h int test_so_func(int a,int b); test_so.c #include "test_so.h" int test_so_func(int a,int b) { return a*b; } 生成so gcc -shared ./test_so.c -o test_so.so 复制so文件到golang项目目录 golang项目目录,建立 load_so.h int do_test_so_func(int a,int b); load_so.c #include "load_so.h" #include <dlfcn.h> int do_test_so_func(int a,int b) { void* handle; typedef int (*FPTR)(int,int); handle = dlopen("./test_so.so", 1); FPTR fptr = (FPTR)dlsym(handle, "test_so_func"); int result = (*fptr)(a,b); return result; } test.go package main /* #include "load_so.h" #cgo LDFLAGS: -ldl */ import "C" import "fmt" func main() { fmt.Println("20*30=", C.do_test_so_func(20, 30)) } 编译 go install 我当前的目录是test,编译后生成test文件 运行 './test' 输出结果 20*30= 600

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

3017 次点击  ∙  1 赞  
加入收藏 微博
1 回复  |  直到 2016-06-20 09:01:34
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传