博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang调用动态库
阅读量:6113 次
发布时间:2019-06-21

本文共 777 字,大约阅读时间需要 2 分钟。

测试动态库

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 
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调用c的时候,掉到了某坑里,地址,结论为

1./* */注释的代码下一行一定是import "C",中间不能有空行

2.import "C"必须单独一行,不能和其它库一起导入

转载地址:http://mgdka.baihongyu.com/

你可能感兴趣的文章
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>