3

几天来,我一直试图让 MinGW-w64 在我的系统上工作,主要是因为它有更新的 GCC 版本,但我要么设置错误,要么 MinGW-w64 本身存在一些奇怪的问题。

我现在已经下载了i686-w64-mingw32-gcc-4.7.2-release-win32_rubenvb,将其解压缩C:/Dev/mingw-ruben并添加C:/Dev/mingw-ruben/bin到 $PATH 环境变量的路径。

我正在尝试构建的是带有 CMake 文件的SFML 2 。运行 CMake 会正常工作,编译器会被识别并通过所有测试。CMake 还会ar.exeC:/Dev/mingw-ruben/bin文件夹中找到 。生成 MinGW Makefile 后,我切换到 Windows 命令行并运行mingw32-make install. 问题出在哪里,我收到错误消息:

mingw-ruben\bin\ar.exe: mingw-ruben/lib/libopengl32.a: No such file or directory

或者对于网络库

mingw-ruben\bin\ar.exe: mingw-ruben/lib/libws2_32.a: No such file or directory

错误似乎很明显,检查时确实没有libopengl32.alibws2_32.ain mingw-ruben/lib/,但文件实际上位于C:/Dev/mingw-ruben/i686-w64-mingw32/lib.

现在我如何告诉 ar/make/cmake 不仅在mingw-ruben/lib目录中搜索,而且在mingw-ruben/i686-w64-mingw32/lib?

i686-w64-mingw32将所有内容从子文件夹复制到mingw-ruben根文件夹是个好主意吗?

附带说明:我可以mingw32-make install再次调用,该过程将继续,但在尝试将我的应用程序与 SFML 链接时,我遇到了许多glXYZ来自 SFML 的函数的未解决符号错误。

更多信息:我使用的是 Windows 8 x64,但我认为这并不重要,是的,我尝试过 MSYS,但它不能解决我的任何问题。

难道我做错了什么?我必须专门配置东西吗?

4

2 回答 2

2

2015 年 1 月 编辑

现在 SFML 2.2 已经发布,这不再是问题,在链接静态时您必须自己链接 SFML 的依赖项。

2014 年 1 月 编辑

从提交165f2b1888f784fe4c07 开始,包括在稳定版 SFML 2.1 中,支持 MinGW-w64 编译器。

然而,在与各方进一步讨论时发现,sfml_static_add_librariesmarco 是一个相当丑陋的黑客。简而言之,它解压缩了静态依赖项并将它们的 obj 文件包含到 SFML 库本身中。这是一个最明显的问题,当您尝试使用您自己的 GLEW 版本时,由于 SFML 已经在使用其内部版本,因​​此失败了。这个问题被带到了论坛并被推了很久,直到 Laurent 最终让步并采用了链接依赖项的正确方法,这意味着你现在必须自己链接它们。

从提交dbf01a775b 开始,它包含在 SFML 2.1 的稳定版本中,当静态链接到 SFML 时,必须在 finally 应用程序中链接 SFML 依赖项。


原来的

在 IRC 上进行了一番交谈后,我们已经弄清楚了。它与 MinGW 无关,但都是 SFML 的错。为了在静态链接时减少 SFML 的依赖项列表,开发人员决定手动从每个库(opengl32、ws2_32、...)中提取符号,这显然不是一个人做事的方式,并且违反了一些 ODR 规则。然后发生实际错误,因为开发人员假设该库将位于该文件夹中,mingw/lib但对于 MinGW w64,它位于一个单独的目录中mingw/version/lib,因此ar.exe没有找到该库。

解决方案

删除对sfml_static_add_libraries宏的调用,然后重新编译。之后,您必须链接静态链接的所有依赖项,就像它应该的那样。

于 2012-10-15T13:05:13.560 回答
1

我认为这可能是您下载的 gcc 发行版的问题。

对这个问题稍加了解就可以在这里提出鲁本的问题:

https://unix.stackexchange.com/questions/45277/executing-binary-file-file-not-found

在我看来,这与此有关(尽管它是关于 linux 而不是赢)

几个月前,我在 gcc 4.7.0 linux->win 交叉编译器中遇到了类似的问题(丢失的文件的名称不同)。所以直到现在我都使用标准的 ubuntu mingw-w64 包,就在昨天我再次尝试 i686-w64-mingw32-gcc-4.7.2-release-linux64_rubenvb.tar.xz 并且它在其他相同的环境中没有问题以前的版本因“..ar.exe: ...没有这样的文件”而失败。有时我也在 Windows 中开发,然后我使用http://www.mingw.org/,这对我来说更容易在 Win 中设置。它仅支持 32 位目标,但对于我的项目来说已经足够了。

于 2012-10-14T11:58:41.390 回答