Linux下调用xxx.so动态库
go 项目中有时会以来与C语言的动态库,因此需要在go语言中封装C语言的接口。
Linux下cgo刚好满足此需求,因此可以使用cgo调用xxx.so库。
本文的编译环境为:Centos7,go1.14.4 gcc-4.8.3-9 。
源代码位置: https://download.youkuaiyun.com/download/ok532655221/12517746
源代码结构:
inc 头文件路径
src 源代码路径
test 测试程序路径,包括c语言测试程序和go语言测试程序
1 、使用源代码之前请先配置好所有环境头文件
2、编译 make -f makefile 生成可执行文件(如果环境完全相同可以不编译)
注意:
报错 ./test: error while loading shared libraries: libVeSdkAli.so: cannot open shared object file: No such file or directory 是由于缺少配置环境变量配置,
需要手动在test目录执行:
export LD_LIBRARY_PATH={LD_LIBRARY_PATH}:./
3、GO语言调用
package main
//
// 引用的C头文件需要在注释中声明,紧接着注释需要有import "C",且这一行和注释之间不能有空格
//
/*
//包含header的目录
#cgo CFLAGS: -I .
//动态库编译方式
#cgo LDFLAGS: -L./ -lVeSdkAli -Wl,-rpath=./
#include "vesdk.h"
*/
import "C"
import (
"fmt"
"unsafe"
)
func main() {
fmt.Println("====