gpt4 book ai didi

c - 如何修复 ".c:6: undefined reference to ' printf'

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:33 24 4
gpt4 key购买 nike

我是大一新生,我想学习 ARM 汇编语言和使用 gnu 工具链,所以我决定从使用 gnu 工具链混合 arm-assembly 文件和 C 文件的小项目开始。我的想法是调用一个在汇编文件中定义的函数。

多.S:

   .globl multi
multi:
str fp,[sp,#-4]!
add fp,sp,#0
sub sp,sp,#12
str r0,[fp,#-8]
str r1,[fp,#-12]
ldr r3,[fp,#-8]
ldr r2,[fp,#-12]
mul r1,r2,r3
mov r3,r1
mov r0,r3
add sp,fp,#0
ldr fp,[sp],#4
bx lr

多.c:

#include <stdio.h>
unsigned int multi(unsigned int a, unsigned int b);

int main(int argc, char *argv[]){
unsigned int x = multi(3,4);
printf("%u\n",x);
return 0;
}

然后我尝试使用如下命令将它们链接在一起:

arm-none-eabi-gcc -g -c -o multi-arm.o multi.S
arm-none-eabi-gcc -g -c -o multi.o multi.c
arm-none-eabi-ld multi.o multi-arm.o -o multi.elf

但是出现了一些错误:

  1. 警告:找不到入口符号_start;默认为 0000000082000000=> 我通过添加 -lc --entry main 解决了这个问题,警告消息消失了。
  2. multi.c:6: 未定义对“printf”的引用。我被这个错误困住了,我花了 2 个小时寻找解决方案,但我仍然无法修复它。

以上是我的问题。感谢大家阅读。

最佳答案

试试这个

arm-none-eabi-as -g -o multi-arm.o multi.S
arm-none-eabi-gcc -g -o multi.elf multi.c multi-arm.o

如果您想直接使用链接器,则必须在命令行中提供 C 库的路径。当 Gcc 调用链接器时,Gcc 知道库的位置(相对于它执行和编译的位置),但由于某些奇怪的原因 ld 不知道。

关于c - 如何修复 ".c:6: undefined reference to ' printf',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55589264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com