将Go编译成DLL/SO
供其他语言调用。
注意
package main
/*
#include
*/
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
调用SO
import ctypes
from ctypes import cdll
example = cdll.LoadLibrary('./example.so')
print(example.Sum(1, 2)) # 3
to_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 ctypes
example = ctypes.CDLL("./example.so")
print(example.Sum(1, 2)) # 3
to_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'