gpt4 book ai didi

c - 使用气体时符号名称冲突

转载 作者:行者123 更新时间:2023-11-30 15:31:36 25 4
gpt4 key购买 nike

我正在使用 gcc 从多个 c 文件生成汇编文件。当我尝试使用gas来组装生成的汇编文件时,它会抛出此错误,因为它找到了多个文件中定义的符号。

Error: symbol '.L???' is already defined

查看文档,.L 前缀的文件应该是本地符号名称,那么为什么当 Gas 在不同文件中找到相同的符号名称时会提示呢?

最佳答案

我不知道您在编译这些文件时使用了什么程序,但当我尝试不正确地编译输出列表时,我遇到了类似的问题。

假设您有两个文件,main.cfoo.c:

/* main.c */
#include <stdio.h>
int main() {
printf("Hello");
if(5==7);
else printf("Yes");
}

/* foo.c */
#include <stdio.h>
int foo() {
printf("Single!");
if(7==5);
else printf("Yes");
}

如果您单独为每个文件生成程序集列表,您可以看到...

    .file   "main.c"
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "Hello\0"
LC1:
.ascii "Yes\0"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
....

.file "foo.c"
.section .rdata,"dr"
LC0:
.ascii "Single!\0"
LC1:
.ascii "Yes\0"
.text
.globl _foo
.def _foo; .scl 2; .type 32; .endef
_foo:
....

...C 代码中使用的字符串常量也针对每个文件单独编号(LC0LC1 都存在于两个文件中,但它们不具有相同的内容)。

现在,如果您尝试将这些列表编译在一起......

as main.s foo.s

你得到了你的错误...

foo.s:3: Error: Symbol `LC0` is already defined
foo.s:5: Error: Symbol `LC1` is already defined

解决方案不仅是为每个文件单独生成列表,而且还将每个列表编译成单独的目标文件,然后链接它们。

as main.s -o main.o
as foo.s -o foo.o
gcc main.o foo.o

关于c - 使用气体时符号名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24697616/

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