1. 简介
将Go编译成DLL/SO
供其他语言调用。
- .DLL:文件是 Windows 操作系统的动态链接库文件。
- .SO 文件是 Unix、Linux 和其他类 Unix 系统的共享库文件。
2. Go编译DLL/SO
注意
- export后面导出的方法名一定要大写。
package main/*
#include <stdlib.h>
*/
import "C"
import "strings"//export Sum
func Sum(a, b C.int) C.int {return a + b
}//export ToLower
func ToLower(c *C.char) *C.char {s := C.GoString(c)return C.CString(strings.ToLower(s))
}func main() {
}
编译成SO
go build -buildmode=c-shared -o example.so
编译成DLL
go build -buildmode=c-shared -o example.dll
3. Python调用DLL/SO
调用SO
import ctypes
from ctypes import cdllexample = cdll.LoadLibrary('./example.so')
print(example.Sum(1, 2)) # 3to_lower = example.ToLower
to_lower.argtypes = [ctypes.c_char_p]
to_lower.restype = ctypes.c_char_p
print(to_lower(b'HELLO WORLD')) # b'hello world'
调用DLL(未测试)
import ctypesexample = ctypes.CDLL("./example.so")print(example.Sum(1, 2)) # 3to_lower = example.ToLower
to_lower.argtypes = [ctypes.c_char_p]
to_lower.restype = ctypes.c_char_p
print(to_lower(b'HELLO WORLD')) # b'hello world'