2017-05-07 83 views
0

我現在正在使用MinGW和g ++(5.3.0)編譯C和C++。如果不用-static-libstdC++編譯MinGW會崩潰

我很確定我沒有改變,但顯然我做了,因爲當我編譯我的DLL時,我注意到當我使用std :: string或std :: unique_ptr時,我無法加載它們。
後來我發現我編譯的每個程序都在啓動時崩潰了。

有點解決了使用-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 

爲什麼會出現這種情況,我能是否讓它停止?

回答

0

從字面上看,沒有碰到任何東西,甚至沒有碰到我的電腦,現在又重新工作了。