c++ - 对汇编函数的 undefined reference

标签 c++ linux gcc assembly cross-compiling

从 C++ 程序中调用汇编函数

我的简单汇编代码是(1.s)

.align 4
.code 32           
.globl testfunc 
.func 
 testfunc:
          bx lr
         .endfunc
 .end

C++ 代码为 (1.cpp)

#include <stdio.h>
#include <stdlib.h>

extern "C"
{
    void testfunc(void);
}

int main()
{
   testfunc();
   printf("completed\n");
   return 0;
}  

我使用arm-none-linux-gnueabi-as -o 1.o 1.s编译了汇编代码

当使用 arm-none-linux-gnueabi-g++ -o 1c.o 1.cpp 编译 C++ 代码时,出现错误

在 main 函数中,未定义对 testfunc() 的引用

为什么即使我将 testfunc() 声明为 extern 也会发生这种情况?

最佳答案

如果编译参数列表采用这种形式:

arm-none-linux-gnueabi-g++ -o 1c.o 1.cpp

这意味着对 1.cpp 进行一些操作以获取目标文件作为输出。我不确定它会做什么,但就你而言,它也可以与链接一起使用。 当它是这种形式时

arm-none-linux-gnueabi-g++ -c 1.cpp

这意味着明确只对文件 1.cpp 进行编译步骤。没有链接和解决依赖关系

如果链接出现问题 之后使用

objdump -T

在两个 .o 文件上检查函数名称是否相同。下划线可能存在一些问题,有些编译器会添加它们,有些则不会 检查您的函数是否使用下划线编译,如果没有,请在汇编代码中手动添加

关于c++ - 对汇编函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24425307/

相关文章:

c - GCC 5.1 警告在 `parallel for` 构造中取消构造

C++析构函数过早调用

c - 结构类型数组

c++ - cpp中的接口(interface)

java - 2个java进程共享JVM吗

c++ - 滥用 soversion minor revision 来支持可选的依赖

linux - 从软件角度看屏幕截图是如何工作的

linux - 用于查找文件大小的 Bash shell 脚本

c++ - 为一些抽象的 Windows 服务器创建 C++ 客户端应用程序 - 如何管理与服务器速度的 TCP 连接?

c++ - 这些对齐功能之间有什么区别?