c - Windows DLL 文件的正确构建模式是什么?

标签 c go gcc dll cgo

这两个步骤:

gcc -c main.c
gcc -o a.exe main.o MyThing.dll

非常适合制作可以调用 MyThing.dll 内部方法的 Windows exe。注意没有 -c 的 gcc main.c 会给出如下错误:

未定义对 MyThing_method 的引用

但是,当尝试使用 cgo 在 Golang 程序中使同一个系统工作时,我遇到了与使用没有 -c 的 gcc 时相同的 undefined reference 错误。我读过:

https://github.com/golang/go/wiki/WindowsDLLs

并且很想尝试使用 syscall.NewLazyDLL 但我的问题是我的 foo.go 文件正在调用 C.SomeMethod() 并且在该方法内它调用 DLL 内的方法。所以看来我需要一种方法来

go build -buildmode=c-share -o MyThing.dll

但我似乎无法获得正确的顺序。如果我可以在简单的 C 程序中做到这一点,那么 Golang 一定有办法做到这一点,我说得对吗?

最佳答案

我最终只是摆脱了这个额外的 c 文件并从 Go 中调用了我需要的方法,例如 https://github.com/golang/go/wiki/WindowsDLLs解释。效果很好。

关于c - Windows DLL 文件的正确构建模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57120689/

相关文章:

c - 当我多次使用 fork() 时,我的程序不会停止

c++ - printf() 函数不起作用

go - 如何使用 Kafka Go 客户端的消费者倒带和查看分区中的先前偏移量

go - 在 Golang 中设置网络命名空间后运行 GRPC 是否有任何已知限制?

c++ - ARM neon 优化 - 摆脱多余的负载

c - 在字符串文字中使用哪些字符是合法的?

跨包的 golang 变量命名约定

c - 可以区分C和汇编模式的GCC宏

c++ - 默认模板类参数混淆了 g++?

c - 为什么 return 语句适用于 void 作为 C 中的返回类型?