Go go编译为C并生成动态链接库

go编译为C并生成动态链接库

  • 1. 根据C类型转换输入和输出的变量类型
  • 2. 编译动态链接库

1. 根据C类型转换输入和输出的变量类型

需将go程序中函数的变量和返回值,根据C类型做相应转换。
函数内的变量不用做转换,只定义输入和输出的。

转换关系类型如下表
Go go编译为C并生成动态链接库_第1张图片

int类型不用做转换,具体参考下面的官方文档:
https://golang.org/cmd/cgo/#hdr-Go_references_to_C

主要是go中的string 和C 中char的转换:

Go string to C string

// Go string to C string
// The C string is allocated in the C heap using malloc.
// It is the caller's responsibility to arrange for it to be
// freed, such as by calling C.free (be sure to include stdlib.h
// if C.free is needed).
func C.CString(string) *C.char

C string to Go string

// C string to Go string
func C.GoString(*C.char) string

例如:

//export run
func run(file_path, output_path * C.char) {
	start := time.Now()
	transToArray(file_path, output_path)
	elapsed := time.Since(start)
    fmt.Println("Time spent:", elapsed)
}

2. 编译动态链接库

转换好后运行下列命令进行编译。
注意:动态链接库在windows是.dll后缀,linux是.so后缀

go build -buildmode=c-shared -o dill_file.dll go_script.go

其中:
dill_file.dll 为需要转换出来的动态链接库文件名
go_script.go为go脚本名

执行完后,路径下会生成该go脚本对应的 dill_file.dlldill_file.h 2个文件。

你可能感兴趣的:(Go)