最近需要利用go的环境调用c语言编译生产的libdlml.so。
一.示例代码结构如下图:

其中dlml.h 和libdlml.so是go需要调用的头文件和lib。
main.go源码如下:

二.过程:
1. sudo go build main.go.此时未报错。在当前目录下生成main可执行文件
2.运行main。
./main
3.此时报错:symbol lookup error: ./main undefined symbol: nvmlInit
![]()
三.解决过程
1.先检查main.go内的配置情况。
#cgo CFLAGS:-I../include //表示当前要引用的头文件路径
#cgo LDFLAGS:-L../lib -ldlml //指定要调用的库为libdlml.so. 注意该配置是去掉了libdlml.so的开头三个字母"lib"和后缀".so" . -l为编译选项<

本文介绍了在Linux环境下,使用Go语言调用C编译生成的动态库libdlml.so的过程。在遇到symbol lookup error后,通过检查配置、ldd命令定位问题,并替换旧版本库,最终成功调用动态库。
最低0.47元/天 解锁文章
3165

被折叠的 条评论
为什么被折叠?



