gpt4 book ai didi

c - C 中 undefined reference 错误 外部汇编包含在 C 中

转载 作者:行者123 更新时间:2023-11-30 14:41:52 25 4
gpt4 key购买 nike

我将外部 asm 包含到 c 中,当我尝试编译时出现错误。

我正在编译这样的c文件 - g++testing.c

错误:

cc0FHCkn.o:testing.c:(.text+0xe): undefined reference to helloWorld collect2.exe: error: ld returned 1 exit status

C 代码:

#include<stdio.h>
extern "C" int helloWorld();
int main() {
printf("Its - ",helloWorld());
}

ASM代码:

.code
helloWorld proc
mov rax, 123
ret
helloWorld endp
end

最佳答案

注意:我使用这个答案是为了能够通过评论和使用 gcc 表达更多内容。

首先,仅执行g++testing.cg++无法链接到未指定的汇编程序文件,因此当然缺少helloWorld

<小时/>

如果我有文件hw.c:

int helloWorld()
{
return 123;
}

我要求通过选项-S生成源汇编程序(我还使用-O来减少汇编程序源代码的大小),所以我不必编写手动汇编文件,我确信它与gcc兼容:

/tmp % gcc -O -S hw.c

生成了文件hw.s:

/tmp % cat hw.s
.file "hw.c"
.text
.globl helloWorld
.type helloWorld, @function
helloWorld:
.LFB0:
.cfi_startproc
movl $123, %eax
ret
.cfi_endproc
.LFE0:
.size helloWorld, .-helloWorld
.ident "GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-16)"
.section .note.GNU-stack,"",@progbits
/tmp %

还有文件m.c:

#include <stdio.h>

extern int helloWorld();

int main()
{
printf("%d\n", helloWorld());
return 0;
}

我能做到:

/tmp % gcc m.c hw.s
/tmp % ./a.out
123
<小时/>

我建议您执行相同的操作,用 C 语言编写 helloWorld,然后使用选项 -S 生成汇编程序,这样做您一定会遵循函数定义中的 gcc 要求

关于c - C 中 undefined reference 错误 外部汇编包含在 C 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54709046/

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