我正在编写一个调用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