3

I am writing a Go app that calls into a Windows DLL. The DLL was written with MSVC and has extern "C" exports using __declspec(dllexport).

The top of my Go app is as follows:

//#cgo CFLAGS: -IC:/Repos/Module/include
//#cgo LDFLAGS: -L. C:/Repos/Module/go/bin/MyModule.dll
//#include <MyModule.h>
import "C"

I'm calling functions from the module like so:

nRet := C.moduleImpl_len()

The problem is that when I try to run this app, I get the following error:

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'

I looked at the DLL exported symbols with DUMPBIN and it showed exactly "moduleImpl_len" as the exported symbol. This is also the symbol as defined in MyModule.h.

Any suggestions on how I can get the symbols to link without having to go the syscall route?

Askable
  • 255
  • 3
  • 10
  • That was a typo on my part when creating the question. My code was correct (a single colon). Now corrected in the question text. – Askable Jan 09 '15 at 20:28
  • This was the correct answer. Why don't you put it in an answer and I'll give you credit. Thx! – Askable Jan 30 '15 at 23:22

2 Answers2

2

If you're trying to link against the dll you need/want "-lMyModule" in the LDFLAGS? https://stackoverflow.com/a/15853231/32453

Community
  • 1
  • 1
rogerdpack
  • 62,887
  • 36
  • 269
  • 388
0

The above will link the DLL in at compile-time which can be desirable in some situations.

In order to link at runtime, one would need to use a syscall package. I was needing to do this on Windows once and this was the first easy and quick example I found to help me try doing it the first time

Jonathan Steele
  • 589
  • 6
  • 9