2012-04-27 59 views
1

我的最终目标是成功链接到Go包中的一些DLL(opengl32.dll glfw.dll和glu32.dll) - 但是trying to link to the go-glfw package gave me "not defined" errorsWindows DLL与cgo链接

因此,我决定从%GOROOT%\ misc \ cgo \ life中的简单未修改示例中,获得一个非常简单的cgo动态/共享库链接工作。但是,仅仅调用命令去建立-o生活main.go失败,基本上是相同的链接器错误,即:

go-build374967034/_/C_/Go/misc/cgo/life.a(c-life.o)(.text): _assert: not defined 

“没有定义” ...只是完全相同的错误我试图链接的时候了glfw按照上面的。

这是一个新鲜的未经过调整的版本,安装了Go 1.0.1,今天上午刚刚在香草,相当新的Win7 64位安装中下载。什么可能会出错?我知道... Windows。愿意听到任何想法......看起来像DLL与CGO的链接是一件不容易的事情,并且从我在网上阅读的内容中很容易做到。然而,即使最简单的例子也不适合我。

回答

1

我认为这个特殊的bug已经在这里讨论过了:http://code.google.com/p/go/issues/detail?id=3261 但我不确定它是否可以应用于你的情况。最后从我读过的,他们提出了一个补丁,但没有真正尝试过,因为我等待1.1版本(希望他们会修复运行时臭名昭着的内存泄漏;))

+0

只是一个说明:没有“运行时臭名昭着的内存泄漏“,Go有一个保守的垃圾收集器,*在32位系统中,在极少数情况下*意味着垃圾不会被收集。没有人报告过64位系统的任何问题,无论如何它要快得多,并且测试得更多。 tl; dr:在64位下坚持下去,你应该没有什么可担心的。 – uriel 2012-04-28 12:50:45

+0

是的,有3个修补程序集适用于Go 1.0.1可解决问题:http://groups.google.com/group/golang-nuts/browse_thread/thread/b98c3677ec716379 ...我仍然遇到问题但是,这是另一回事......所以将其标记为答案。 – metaleap 2012-04-29 02:58:20

+0

只是为了防止任何人对我非常奇特的glfw-only cgo问题感兴趣... http://stackoverflow.com/questions/10369513/dll-linking-via-windows-cgo-gcc-ld-freeglut-works-glfw -doesnt-whats-the-c – metaleap 2012-04-29 04:27:48