在MinGW下使用GCC链接器时出错
Error in using GCC Linker under MinGW
编译过程分为4个阶段:
- 预处理-扩展宏和头文件 编译器
- -将源代码转换为汇编语言
- 汇编-将汇编代码转换为机器码
- 链接-将机器码链接成单个可执行文件。
假设我们有一个名为test.cpp的源代码,我们需要编译它,所以所需的命令将是:
- cpp test.cpp>测试。输出为。i file,是header的展开形式文件和宏]
- g++ -S测试。i[输出为。s文件,汇编语言文件]
- 为- 0测试。o测试。输出是.o文件,依赖于机器机器代码)
- 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
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 在发布模式下启动使用库的静态链接编译的应用程序时出错
- 编译时出错 - 链接.cpp和头文件
- 将 boost 与 Visual Studio 和 vcpkg 链接时出错
- 获取链接 创建flyweight_pattern时出错
- 从Qt5链接MySQL时出错
- 迭代器关系运算符出错(带单独链接和迭代器的自定义哈希表)
- 与 glfw3 链接时出错
- GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则出错
- 可能的 GCC 链接器错误会导致将弱符号和局部符号链接在一起时出错
- 使用提升库和 clion 链接时出错
- 在 Fedora 27 中构建 GLFW 时链接期间出错
- 将 CLANG 构建的可执行文件与 G++-v6 构建的 Boost 库链接时出错
- 链接 gtest 项目时出错
- 链接webrtc本机时出错,因为未定义对具有std::string的方法的引用
- wxwidget 3.1.2 代码块 17.04 在链接步骤中出错
- 链接Firebase C (分析)库时出错
- 在Windows上使用GCC的链接时间优化构建wxWidgets DLL时出错
- 链接外部变量 c++ 时出错