MinGW下使用GCC Linker报错

Error in using GCC Linker under MinGW

编译过程分为4个阶段:

  1. 预处理器 -扩展宏和头文件。
  2. 编译器 -将源代码转换为汇编语言
  3. 汇编程序 - 将汇编代码转换为机器代码
  4. 链接器 -links 形成单个可执行文件的机器代码。

假设我们有需要编译的名为 test.cpp 的源代码,因此所需的命令将是:

  1. cpp test.cpp>test.i [输出为.i文件,header的扩展 文件和宏]
  2. g++ -S test.i [输出为.s文件,汇编语言文件]
  3. as -o test.o test.s [输出为.o文件,机器相关 机器码]
  4. ld -o test.exe test.o [输出为.exe文件,可执行文件 可以运行直接通过操作系统]

所以问题出在最后一步,我收到以下错误:

test.o:test.cpp:(.text+0x32): 未定义引用 __mingw_vprintf' test.o:test.cpp:(.text+0x4a): undefined reference to__main' test.o:test.cpp:(.text+0x75): 对 std::ios_base::Init::~Init()' test.o:test.cpp:(.text+0xa5): undefined reference tostd::ios_base::Init::Init()' 的未定义引用 test.o:test.cpp:(.text+0xb1): 对 atexit' ld: test.o: bad reloc address 0x0 in section.pdata 的未定义引用 ld: final link failed: 无效操作

注意:是的,我们可以通过使用 "g++ test.cpp" 来获得可执行文件来避免这些步骤 a.exe 但目的是了解构建过程的每个步骤。

Link 用 gcc 代替 ld:

gcc -o test.exe test.o