编译简单的Hello World时多个“多个定义...”

时间:2015-09-13 08:49:41

标签: c++ eclipse mingw

我正在使用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;

1 个答案:

答案 0 :(得分:1)

MinGW 默认情况下链接标准库, libstdc ++ 作为静态链接, libgcc 作为共享(因为他来自Unix GCC)。 -static通常是-static-libgcc的快捷方式,相反的是-shared-libgcc(如果编译器默认静态链接,例如 TDM GCC ),则非常有用。

您的两个静态链接的组合是多余的(请参阅GCC links options),只需使用static。你只得到这几个符号,因为优化器抛弃了不使用的符号。

主要问题可能是,您没有编译多个目标文件并链接一次,而是将所有目标文件与标准库链接,最后将它们链接在一起。