未定义的汇编函数引用

时间:2014-06-26 08:00:10

标签: 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,也会发生这种情况?

1 个答案:

答案 0 :(得分:0)

如果编译参数列表采用该格式:

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文件上的

并检查函数的名称是否相同。下划线可能存在一些问题,一些编译器会添加一些问题 检查您的函数是否使用下划线编译,如果不是在汇编代码中手动添加

相关问题