尝试使用 MinGW 编译 Assembly + C++:ccqKAvXJ.o:main.cpp:(.text+0x18):对 'GetMagicNumber' 的未定义引用
Trying to compile Assembly + C++ with MinGW: ccqKAvXJ.o:main.cpp:(.text+0x18): undefined reference to `GetMagicNumber'
我有这个简单的示例:
主.cpp:
#include <iostream>
extern "C" int GetMagicNumber();
int main(void)
{
std::cout << "The magic number is: " << GetMagicNumber();
return 0;
}
函数:
.section .text
.global GetMagicNumber
GetMagicNumber:
movl $42, %eax
ret
和构建.bat:
C:QtQt5.2.0Toolsmingw48_32binas functions.s -o functions.o
C:QtQt5.2.0Toolsmingw48_32bing++ functions.o main.cpp -o MagicNumber.exe
或
C:QtQt5.2.0Toolsmingw48_32bingcc functions.s main.cpp -lstdc++ -o MagicNumber.exe
当我尝试使用 MinGW 4.8 进行编译时。我得到:
C:QtQt5.2.0Toolsmingw48_32bingcc functions.s main.cpp -lstdc++ -o MagicNumber.exe
C:Users...LocalTempccqKAvXJ.o:main.cpp:(.text+0x18): undefined reference to `GetMagicNumber'
collect2.exe: error: ld returned 1 exit status
我已经阅读了一些教程,我看了视频,但我仍然无法弄清楚我做错了什么。为什么会出现未定义的引用错误?
外部作用域 C 符号具有前导下划线,因此请尝试:
.section .text
.global _GetMagicNumber
_GetMagicNumber:
movl $42, %eax
ret
编辑 如果你想使代码更加与平台无关,我使用以下宏,其中汇编程序文件有一个.S
扩展名,由 C 编译器处理,允许预处理器一起播放:
#ifdef __APPLE__
#define NAME(name) _##name
#else
#define NAME(name) name
#endif
.globl NAME(GetMagicNumber);
NAME(GetMagicNumber):
...
(请参阅此处的示例)。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 在 Linux 上编译 - 在函数 '_start' 中:(.text+0x20):对 'main' 的未定义引用
- (.text+0x20):对"主要"的未定义引用是什么意思
- 从emxArray_uint8_T检测到错误:.text+0xc1):未定义对"emxInit_uint8_T1(emxArray_uint8_T**, int)"的引用?
- crt1.o:在函数"_start"中:(.text+0x20):对"main"的未定义引用
- 看起来如此主要的错误.cpp:(.text.startup+0xd6):未定义对"vtable for Counter"的引用?
- main.cpp:(.text+0x8ea):在C++中未定义的引用
- C/C++ TensorFlow hello_tf.c:(.text+0xa):对"TF_Version"的未定义引用
- main.cpp:(.text+0x8f):对[对象方法]的未定义引用
- main.cpp :(.text 0x5f):未定义的引用
- 尝试使用 MinGW 编译 Assembly + C++:ccqKAvXJ.o:main.cpp:(.text+0x18):对 'GetMagicNumber' 的未定义引用
- main.c:(.text+0x30):对"互惠"的未定义引用
- g++ 链接问题:在函数 '_start' 中: (.text+0x20):对 'main' 的未定义引用
- 错误:SList.cpp:(.text+0x69):尝试将节点插入链表头C++时未定义对"SLNode::SLNode()"的引用
- 在函数 '_start' 中: (.text+0x20): 未定义对 'main' 的引用 collect2: ld 返回 1 个退出状态
- Sublime Text 3.0 c++对类的未定义引用
- (.text+0x20):尝试编译文件时未定义对"main".cpp引用