0
我使用gcc從多個c文件生成裝配文件。當我嘗試使用gas來組裝生成的程序集文件時,它會發現這個錯誤,因爲它找到了在多個文件中定義的符號。使用氣體時符號名稱衝突
Error: symbol '.L???' is already defined
望着文檔,.L前綴的文件應該是局部符號的名稱,以便當它發現在不同的文件相同的符號名稱爲什麼氣不抱怨呢?
我使用gcc從多個c文件生成裝配文件。當我嘗試使用gas來組裝生成的程序集文件時,它會發現這個錯誤,因爲它找到了在多個文件中定義的符號。使用氣體時符號名稱衝突
Error: symbol '.L???' is already defined
望着文檔,.L前綴的文件應該是局部符號的名稱,以便當它發現在不同的文件相同的符號名稱爲什麼氣不抱怨呢?
我不知道編譯這些文件時使用了什麼過程,但是當我試圖編譯輸出列表時,我遇到了類似的問題。
比方說,你有兩個文件,main.c
和foo.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代碼中使用的字符串常量也針對每個文件單獨編號(LC0
和LC1
存在於兩個文件中,但它們沒有相同的內容)。現在
,如果你嘗試編譯這些物品一起...
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和/或生成的彙編代碼嗎?具體來說,部件給你帶來麻煩? –