Golang 编译生成 DLL 文件(简明教程)
Posted 王张飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang 编译生成 DLL 文件(简明教程)相关的知识,希望对你有一定的参考价值。
1、gcc环境配置
Go 语言编译 DLL 文件,需要 gcc 的支持,Windows 环境下的 gcc 系统是 MinGW,官网下载地址是:
https://sourceforge.net/projects/mingw-w64/
2、编写 Go 语言程序:go2python.go
package main
import (
"C"
"time"
)
var c chan int
func decrement(n int) {
for n > 0 {
n -= 1
}
}
//export count_time
func count_time() *C.char {
start := time.Now()
decrement(100000000)
total_time := time.Since(start).String()
return C.CString(total_time)
}
func main() {}
注意3点:
1、注释 //export PrintBye 和 //export Sum 在编译 DLL 的时候是必须的,说明了 DLL 需要输出的函数。注意注释和下面的函数名之间不能有空行。
2、函数 main 也是必不可少的,但是不知道是否能够用它来做 DLL 的初始化,这个以后再仔细研究。
3、go脚本文件名,不能命名为xxx_test.go。
3、编译生成 DLL 文件
MinGW 安装后有一个叫做 Run terminal 的快捷方式,运行后进入命令行方式,进入 exportgo.go 所在目录,运行如下命令:
go build -buildmode=c-shared -o go2python.dll go2python.go
编译生成 go2python.dll 和 go2python.h 两个文件。
4、python调用go
python通过调用步骤3中生成的go2python.dll,实现对go的调用
import time
from ctypes import cdll, c_char_p
start = time.time()
# 加载动态链接库
lib = cdll.LoadLibrary('./go2python.dll')
# 配置输出参数变量类型
lib.count_time.restype = c_char_p
# 调用方法
rest = lib.count_time()
end = time.time()
print(f"Go 内部执行时间:{rest}")
print(f"Python 整体执行时间: {end - start}s")
输出:
Go 内部执行时间:b'40.0523ms'
Python 整体执行时间: 0.04304170608520508s
本博客讲述的程序下载链接:https://download.csdn.net/download/RNG_uzi_/23372991
致谢:
https://blog.csdn.net/quicmous/article/details/102772419
https://zhuanlan.zhihu.com/p/368060429
以上是关于Golang 编译生成 DLL 文件(简明教程)的主要内容,如果未能解决你的问题,请参考以下文章