我正在编写一个Go应用程序,它调用一个Windows。DLL是用MSVC编写的,并使用__declspec(dllexport)导出"C“。
我的围棋应用程序的顶部如下:
//#cgo CFLAGS: -IC:/Repos/Module/include
//#cgo LDFLAGS: -L. C:/Repos/Module/go/bin/MyModule.dll
//#include <MyModule.h>
import "C"我从模块调用函数,如下所示:
nRet := C.moduleImpl_len()问题是,当我尝试运行这个应用程序时,我会得到以下错误:
C:\Users\MINDO~1\AppData\Local\Temp\go-build836751819\mod\modimpl\_obj\modimpl.cgo2.o: In function `_cgo_e2aaf076ab69_Cfunc_moduleImpl_len':
C:/Repos/Module/go/src/mod/modimpl/modimpl.go:90: undefined reference to `moduleImpl_len'我用DUMPBIN查看了DLL导出的符号,它准确地显示了"moduleImpl_len“作为导出的符号。这也是MyModule.h中定义的符号。
有什么建议,我可以让符号链接,而不必走syscall的路线?
发布于 2015-01-31 00:06:35
如果您试图链接到dll,则需要/希望在LDFLAGS?https://stackoverflow.com/a/15853231/32453中使用"-lMyModule“。
发布于 2022-11-05 00:22:30
上面的链接将在编译时链接DLL,这在某些情况下是可取的.
为了在运行时进行链接,需要使用syscall包。我需要在Windows和这是我发现的第一个简单快捷的例子。上这样做,以帮助我第一次尝试这样做
https://stackoverflow.com/questions/27849137
复制相似问题