我正在使用MinGW编译Eclipse C / C ++ Mars Edition中的简单Hello World。
代码:
#include <iostream>
using namespace std;
int main(){
cout << "Hello World!" << endl;
}
编译器标志:
-I"H:\Eclipse\Workspace\Project" -O0 -Wall -static -static-libgcc
错误:
multiple definitions of '__gcc_deregister_frame'
multiple definitions of '__gcc_register_frame'
multiple definitions of '_argc'
multiple definitions of '_argv'
multiple definitions of '_mingw32_init_mainargs'
multiple definitions of '_onexit'
multiple definitions of 'atexit'
multiple definitions of 'mainCRTStartup'
multiple definitions of 'WinMainCRTStartup;
答案 0 :(得分:1)
MinGW 默认情况下链接标准库, libstdc ++ 作为静态链接, libgcc 作为共享(因为他来自Unix GCC)。 -static
通常是-static-libgcc
的快捷方式,相反的是-shared-libgcc
(如果编译器默认静态链接,例如 TDM GCC ),则非常有用。
您的两个静态链接的组合是多余的(请参阅GCC links options),只需使用static
。你只得到这几个符号,因为优化器抛弃了不使用的符号。
主要问题可能是,您没有编译多个目标文件并链接一次,而是将所有目标文件与标准库链接,最后将它们链接在一起。