在MinGW 4.7.1上使用-static-libstdc++标志进行链接

13

我试图在Windows 7上使用Code:: Blocks 12.11和这些编译器标志(在项目 > 链接器设置 > 其他链接器设置中)使用MinGW 4.7.1编译Allegro 5:

-static-libgcc  
-static-libstdc++

结果:

unrecognized command line option '-static-libstdc++'

如何解决?


1
该死,第三个网站也没有帮助... - topright gamedev
7
编译游戏引擎是一个编程问题。不是吗? - topright gamedev
1
超级用户上的问题:http://superuser.com/questions/530165/linking-with-static-libstdc-flag-on-mingw-4-7-1 - topright gamedev
2
在stackoverflow.com上有许多类似的问题,请查看相关内容。 - topright gamedev
4
在我看来,这绝不是离题。我认为由C++编译器提供的代码编译问题/错误是相关话题。 - Victor Stafusa - BozoNaCadeia
显示剩余2条评论
3个回答

9

g++ --version 是什么版本?我不确定它引入的确切版本,但是 -static-libstdc++ 是最近才加入的。在此之前,您需要像这样做:-static -lstdc++ -dynamic。(如果编译器版本为 4.7.1,则不应该有问题,但我不知道 MinGW 版本与实际编译器版本的映射关系)。


哇,它说是4.6.2版本。我本以为是4.7.1版本,因为分发包中有mingw32-gcc-4.7.1.exe。 - topright gamedev
1
分发包中还有一个目录gcc\mingw32\4.7.1。真是一团糟。 - topright gamedev
1
@toprightgamedev 如果我没有记错的话(因为我已经有一段时间没有安装MingW了,我的当前PC是Linux),在下载页面上可以选择几个版本。但是最肯定的陈述是由g++ --version给出的,因为它是编译在内的。但正如另一个发帖者所说:找到库所在的位置,看看是否有libstdc++.a。如果没有,请下载一个。并确保它在同一个目录中;如果g++在较早的目录中发现了一个libstdc++.so,它就不会再查找了。 - James Kanze
1
我已经设置了 libstdc++.a 的显式路径,并且只使用了“其他链接器选项”:-static-libgcc 进行编译。但是它显示了以下错误信息:undefined reference to _Unwind_Resume'undefined reference to __gxx_personality_v0' - topright gamedev
当使用-static-libgcc -static-libstdc ++链接器标志与mingw一起使用时,也可能会发生这种情况。在此处阅读更多信息:https://stackoverflow.com/questions/50779224/exceptions-not-caught-when-linking-static-libs - vgulkevic

1

我没有测试过,但尝试将其分开为-static -libstdc++


找不到 -libstdc++。 - topright gamedev
在MinGW/lib/gcc/mingw32中存在libstdc++.a。 - topright gamedev
1
@toprightgamedev 这是一个好问题。 如果没有静态库存在,g++就无法链接它。(如果没有,这有点傻,因为我想不到任何情况下你会想动态链接c++标准库) - James Kanze
是的,MinGW 4.7.1(随Code::Blocks 12.11安装)只有libstdc++.a库(通过libstdc搜索)。 - topright gamedev
我想在Code::Blocks论坛上询问,但仍在等待管理员的注册批准…:] - topright gamedev
1
将“-libstdc++”替换为“lstdc++”,我认为这样就可以了... - While-E

0

2
链接已失效。 - SolarBear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接