mingw64下编译GLFW的Win64版本

Posted

技术标签:

【中文标题】mingw64下编译GLFW的Win64版本【英文标题】:Compiling Win64 versions of GLFW under mingw64 【发布时间】:2012-04-28 03:46:45 【问题描述】:

首先,我真的需要制作一个 64 位版本的 glfwdll.a 和 glfw.dll (所以我希望最终能够成功地让 Go glfw 绑定在 Windows 下工作......在 Linux 下轻而易举!)

似乎我现在使用 mingw64、MSYS 及其 make 脚本成功编译了 64 位版本的 glfwdll.a 和 glfw.dll,尽管我确实收到了一些错误消息,例如“找不到 maincrt 入口点,使用默认的 0xsomehexnumber 代替”或类似的。入口点当然是指可执行文件,在这种情况下是示例目录中的那些。

事实上,它们中的大多数都不起作用!然而,一切都建成了。以下可执行文件有效:

listmodes.exe mtbench.exe mthello.exe 和particle.exe -- 后者是唯一对我有用的图形(3d gfx)示例(前者只是将一些测试信息输出到控制台窗口)。

现在其他的有什么问题?它们不会崩溃,它们不会向控制台报告任何内容……我运行它们,它们会立即返回,无声无息。

我的 GLFW 构建是否损坏?怎么修? 4 个有效的示例与其他无效的示例之间的最大区别是什么?

这是一个相当新的、普通的 Win7 64 位安装。没有垃圾软件,一切都是最新的,UAC 和主题已关闭,根本没有安装很多软件,Nvidia GPU 驱动程序已更新(GPU Caps Viewer 等运行良好,所以 OpenGL 就在那里)。

【问题讨论】:

【参考方案1】:

我还不允许添加 cmets,所以我会发布这个作为答案。

您遇到的问题是由于 GLFW 中的三个单独的错误造成的。我今天修复了它们,这些修复将包含在 GLFW 2.7.6 中。在此之前,您可以使用来自GLFW Subversion repository 的中继。

【讨论】:

在最新版本的 Go、GLFW 和 Mingw-w64 中,现在一切正常。再次感谢!【参考方案2】:

要确保您确实没有使用 opengl32.dll、glu32.dll、glut32.dll 等的 DLL 地狱问题,请查看事件查看器工具,看看您的应用程序是否有一些警告或错误。

这是我的想法,因为您只能运行与“真正的”OpenGL API 毫无共同之处的 mtbench 和 mthello。

虽然没有关于particle.exe 的线索——也许GLFW 在内部检查错误并调用exit() 例程?还要检查 %errorlevel%。

也看看这里: http://glfw.svn.sourceforge.net/viewvc/glfw/trunk/examples/pong3d.c?revision=1110&view=markup

如果“!glfwGetWindowParam( GLFW_OPENED )”有一个GameMenu()函数可能静默退出,这显然意味着OpenGL 没有初始化。

同样的函数在这里用作退出标志 http://glfw.svn.sourceforge.net/viewvc/glfw/trunk/examples/wave.c?revision=1110&view=markup

再次仔细检查 DLL!

我相信您在构建过程中不会犯“高级”错误,所以在“用户级别”可能会发生一些有趣的事情。

还有一个建议: http://sourceforge.net/projects/glfw/forums/forum/247562/topic/3868944

某些参数可能不完全适合您。

要“修复”示例,请尝试注释掉 glfwGetWindowParam 调用。

【讨论】:

实际上我的问题选择不当——真正的问题是构建本身没有按预期完成。除了提到的 4 个示例之外,我确实收到了所有条目符号警告。所以难怪他们不工作。在制作过程结束时也会出现链接器错误,因此尽管确实构建了库,但它们必须在开始时有些错误的构建。在一个单独的线程中跟进此问题,并在 GLFW 的跟踪器中提交了一个问题。不过,感谢您的指点,那里仍然有有用的知识! 好的。无论如何,在 Win32 中使用 GCC 风格编译/构建总是接近噩梦 :) 我自己从不喜欢 cygwin/msys :) 我总体上对 Go 非常满意,但是因为他们选择 gcc 作为 C 互操作 - 我对这部分别无选择。 :) 顺便说一下,particles.exe 是唯一使用 -mconsole 而不是 -mwindows 编译/链接的 (GUI) 示例应用程序。因此这里没有条目符号问题。

以上是关于mingw64下编译GLFW的Win64版本的主要内容,如果未能解决你的问题,请参考以下文章

mingw 构建 gdal 2.1.2

如何在 win7 下编译 openssl?

Win10系统下编译GEOS3.6.2

在Windows下编译mongo-c-driver 1.3.x

debian下编译安装poco

在mingw环境下编译assimp