编译简单的Hello World时进行多次"multiple definition of ..."

Multiple "multiple definition of ..." while compiling simple Hello World

本文关键字:multiple of definition 简单 Hello World 编译      更新时间:2023-10-16

我正在使用MinGW在Eclipse C/c++ Mars Edition中编译简单的Hello World。

代码:

#include <iostream>
using namespace std;
int main(){
    cout << "Hello World!" << endl;
}

编译器标志:

-I"H:EclipseWorkspaceProject" -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;

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

这两个静态链接的组合是多余的(参见GCC链接选项),只使用static。你只能得到这几个符号,因为优化器会丢弃那些没用的符号。

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