繁体   English   中英

未定义对汇编函数的引用

[英]Undefined reference to an assembly function

汇编函数将从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 ++编译C ++代码时-o 1c.o 1.cpp出现以下错误

在函数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文件中,并检查函数名称是否相同。 下划线可能存在一些问题,有些编译器将其添加,有些则未添加。检查您的函数是否使用下划线编译,如果未在汇编代码中手动添加,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM