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 文件(简明教程)的主要内容,如果未能解决你的问题,请参考以下文章

VisualStudio2019 DLL生成并使用教程(C++)最详细Demo教程

[转载]Golang 编译成 DLL 文件

golang编译dll给C#调用

goland,cgo加载32位DLL遇到的问题

Visual Studio中怎么生成动态链接库的lib文件

golang中调用c的正确姿势