我正在编写一个调用Windows DLL的Go应用程序。 该DLL是使用MSVC编写的,并且使用__declspec(dllexport)具有外部" C"导出。
我的Go应用程序的顶部如下:
1 2 3 4 | //#cgo CFLAGS: -IC:/Repos/Module/include //#cgo LDFLAGS: -L. C:/Repos/Module/go/bin/MyModule.dll //#include <MyModule.h> import"C" |
我从这样的模块中调用函数:
1 | nRet := C.moduleImpl_len() |
问题是,当我尝试运行此应用程序时,出现以下错误:
1 2 | 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路线就能获得符号链接的任何建议?
- 这是我提出问题时的错字。 我的代码是正确的(一个冒号)。 现在已在问题文本中更正。
- 这是正确的答案。 你为什么不把它放在一个答案,而疾病给你功劳。 谢谢!
如果您尝试链接到DLL,则需要/想要LDFLAGS中的" -lMyModule"? https://stackoverflow.com/a/15853231/32453