在MinGW下使用GCC链接器时出错

Error in using GCC Linker under MinGW

本文关键字:链接 出错 GCC MinGW      更新时间:2023-10-16

编译过程分为4个阶段:

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

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

  1. cpp test.cpp>测试。输出为。i file,是header的展开形式文件和宏]
  2. g++ -S测试。i[输出为。s文件,汇编语言文件]
  3. 为- 0测试。o测试。输出是.o文件,依赖于机器机器代码)
  4. ld -o test.exe测试。输出的是。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 to引用std::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: Invalid operation

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

链接gcc代替ld:

gcc -o test.exe test.o