英文:
How can I build a dll with cgo and .def file
问题
我想实现DLL转发(或DLL代理)。
在MinGW中,我可以使用带有.def文件的cpp源码,例如gcc -shared -o test.dll functions.def test.cpp
。
但是我不知道如何在Golang中实现它。
英文:
I want to implement dll forwarding(or dll proxy)
In mingw, I can use cpp source with .def file, like gcc -shared -o test.dll functions.def test.cpp
But I don't know how to implement it in golang
答案1
得分: 1
我知道如何解决这个问题。
使用extldflags。
第一种方法:
- 将.def文件编译为.exp文件
dlltool --def functions.def --output-exp evildll.exp
- 编译main.go
main.go
package main
import "C"
func main() {
// 需要一个main函数以将CGO编译包作为C共享库
}
使用命令go build -buildmode=c-shared -o exportgo.dll -ldflags="-extldflags=-Wl,C:/Users/Akkuman/Desktop/go-dll-proxy/evildll.exp"
。
然后你就可以得到dll文件。
第二种方法
使用命令go build -buildmode=c-shared -o exportgo.dll -ldflags="-extldflags=-Wl,C:/Users/Akkuman/Desktop/go-dll-proxy/functions.def"
。
然后你就可以得到dll文件,但是会有一个额外的导出函数。
英文:
I know what to do to solve this problem.
use the extldflags
First Way:
- compile the .def file to .exp file
dlltool --def functions.def --output-exp evildll.exp
- compile main.go
main.go
package main
import "C"
func main() {
// Need a main function to make CGO compile package as C shared library
}
use command go build -buildmode=c-shared -o exportgo.dll -ldflags="-extldflags=-Wl,C:/Users/Akkuman/Desktop/go-dll-proxy/evildll.exp"
then you can get the dll
Second Way
use command go build -buildmode=c-shared -o exportgo.dll -ldflags="-extldflags=-Wl,C:/Users/Akkuman/Desktop/go-dll-proxy/functions.def"
then you can get the dll, but with a additional export function
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论