扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
直接调用so的函数cgo应该绕不开吧,我写过一个银行的应用程序调用其特色业务接口,因为接口只支持c和java,我就封装了一个c的so,然后用cgo调用后写了一个RPC供远程的go语言调用,因为RPC只负责信息交互不负责业务逻辑,所以写了不到百行,以后基本不用再改。记住虽然go语言自带gc,但cgo还是要手工释放内存哦。
创新互联公司专注于比如网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供比如营销型网站建设,比如网站制作、比如网页设计、比如网站官网定制、微信平台小程序开发服务,打造比如网络公司原创品牌,更为您提供比如网站排名全网营销落地服务。
1、在我们的$GOPATH/src路径下创建一个项目,随意写的nonels目录。
2、在目录下创建一个c语言的头文件hi.h。
3、在目录下创建一个c语言的实现hi.c。
4、在目录下创建go启动文件main.go。
测试动态库步骤:
1、test_so.h
2、test_so.c
3、生成so
4、复制so文件到Go项目目录
Go项目目录
1、load_so.h
2、load_so.c
3、test.go
4、Go项目目录要放在$GOPATH/src/目录下,这也是正常操作。
test目录为Go项目,里边是上述创建的所有源码文件。
在$GOPATH/src/test/里直接使用gobuild编译生成test二进制文件,此处需要注意执行路径。
问题
1、/**/注释的代码下一行一定是import“C”,中间不能有空行
2、importC必须单独一行,不能和其它库一起导入
3、有人编译的时候会报错:
这个主要是执行目录问题,一定要在$GOPATH/src/项目/目录下,用gobuild执行,gobuild后边不要有任何文件名。
或者用gorun.运行,或者goruntest,test是项目名。不能用goruntest.go。
4、还有人报这个错:test.go文件里的cgoLDFLAGS:-ldl这一行不要删掉。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流