python与go的对接
.so
.so
编译
用测试项目来记录解决过程
测试环境:windows64
源码目录结构:
---test
|___Add___add.go
|___main___main.go
给python调用需要在被调用的函数前加上
//export 函数名
import "C"
遇到的问题
进行的操作:
在test目录下直接go bulid,报错,提示必须要有 go 文件
go build -o main
这个错误是因为在 32 位的 Windows 操作系统上使用了 64 位版本的 Go,或者是因为在 64 位的 Windows 操作系统上使用了不支持 64 位编译的 C 编译器。
于是修改环境变量
说明:
cgo
2、python平台也是Windows,需要设置 GOARCH 为64位平台,对方才能调用
3、这个部分是报错的原因,要先重新下载 mingw32 ,之前下载的环境是32位系统,参考,再修改环境变量
原来的环境变量如下,用作备份
.so
可参考
打包
//export 函数名
在终端输入
go build -buildmode=c-shared -o mylib.so ./main.go
mylib.so
./
如果是需要打包项目,需要进入项目目录下,执行
go build -buildmode=c-shared -o mylib.so ./...
python调用
python调用的时候也遇到了一些问题
[]byte[]byte
string[]byte*char
*C.char
python 的处理如下
go需要调用C.GoString()将*C.char转为go中的string类型
最后补充一个表, python,ctypes , c 对应类型