【问题标题】:MinGW crash if not compiled with -static-libstdc++如果未使用 -static-libstdc++ 编译,MinGW 会崩溃
【发布时间】:2017-05-07 18:04:36
【问题描述】:

我暂时使用 MinGW 和 g++ (5.3.0) 编译 C 和 C++。

我很确定我什么也没做,但显然我做了,因为当我编译我的 DLL 时,我注意到我在使用 std::string 或 std::unique_ptr 时无法加载它们。
后来我注意到我编译的每个程序都在启动时崩溃了。

Kinda 使用 -static-libstdc++ 作为链接器标志解决了这个问题,这让我的文件变大了。

今天我启动了我的电脑,一切都变得疯狂。

SSCCE:

int main() {}

当使用g++ sscce.cpp -o sscce.exe 编译时它可以工作,但是当我这样做时

g++ -c sscce.cpp -o sscce.o
g++ sscce.o -o sscce.exe

我明白了:

main.o:main.cpp:(.text+0x280): multiple definition of `_mingw32_init_mainargs'
d:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../crt2.o:(.text+0x280): first defined here
main.o:main.cpp:(.text+0x2c0): multiple definition of `mainCRTStartup'
d:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../crt2.o:(.text+0x2c0): first defined here
main.o:main.cpp:(.text+0x2e0): multiple definition of `WinMainCRTStartup'
d:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../crt2.o:(.text+0x2e0): first defined here
main.o:main.cpp:(.text+0x300): multiple definition of `atexit'
d:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../crt2.o:(.text+0x300): first defined here
main.o:main.cpp:(.text+0x310): multiple definition of `_onexit'
d:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../crt2.o:(.text+0x310): first defined here
main.o:main.cpp:(.text+0x320): multiple definition of `__gcc_register_frame'
d:/mingw/bin/../lib/gcc/mingw32/5.3.0/crtbegin.o:(.text+0x0): first defined here
main.o:main.cpp:(.text+0x410): multiple definition of `__gcc_deregister_frame'
d:/mingw/bin/../lib/gcc/mingw32/5.3.0/crtbegin.o:(.text+0xf0): first defined here
main.o:main.cpp:(.bss+0x4): multiple definition of `_argc'
d:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../crt2.o:(.bss+0x4): first defined here
main.o:main.cpp:(.bss+0x0): multiple definition of `_argv'
d:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../crt2.o:(.bss+0x0): first defined here
main.o:main.cpp:(.eh_fram+0xc8): multiple definition of `__EH_FRAME_BEGIN__'
d:/mingw/bin/../lib/gcc/mingw32/5.3.0/crtbegin.o:(.eh_frame+0x0): first defined here
d:/mingw/bin/../lib/gcc/mingw32/5.3.0/crtbegin.o:(.text+0x92): undefined reference to `_Jv_RegisterClasses'
collect2.exe: error: ld returned 1 exit status

为什么会发生这种情况,我该怎么做才能让它停止?

【问题讨论】:

    标签: c++ windows g++ mingw libstdc++


    【解决方案1】:

    实际上没有碰任何东西,甚至我的电脑也没有,现在它又可以工作了。

    【讨论】:

      猜你喜欢
      • 2012-10-21
      • 2014-01-04
      • 1970-01-01
      • 2014-12-05
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      相关资源
      最近更新 更多