自学内容网 自学内容网

Go编译DLL与SO

1. 简介

将Go编译成DLL/SO供其他语言调用。

  • .DLL:文件是 Windows 操作系统的动态链接库文件。
  • .SO 文件是 Unix、Linux 和其他类 Unix 系统的共享库文件。

2. Go编译DLL/SO

注意

  1. 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 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'

原文地址:https://blog.csdn.net/yimtcode/article/details/136341516

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!