簡體   English   中英

與ld / gcc鏈接不會產生相同的結果(錯誤/成功)

[英]Linking with ld/gcc doesn't produce same result (error/sucess)

我有一個問題,編譯后我將無法使用ld進行鏈接,但是當我收到錯誤消息時,請看看我該怎么做:

make i386
gcc -g -c -I. -I/usr/include -o p_test.o.i386 pkcs11test.c
ld -o p_test.i386 p_test.o.i386 -g -ldl     
ld: p_test.o.i386: référence au symbole non défini «fflush@@GLIBC_2.0»
//lib/i386-linux-gnu/libc.so.6: error adding symbols: DSO missing from command line
make: *** [i386_p_test] Erreur 1

所以用ld我遇到了這個錯誤,但是當我嘗試使用gcc時

make i386
gcc -g -c -I. -I/usr/include -o p_test.o.i386 pkcs11test.c
gcc -o p_test.i386 p_test.o.i386 -g -ldl

我沒有錯誤,我的可執行文件

您知道如何使ld與我的程序鏈接嗎?

謝謝 !

當使用gcc -o p_test.i386 p_test.o.i386 -g -ldl啟動gcc時,實際上會向ld命令添加很多內部庫。 您可以通過在gcc中添加-v選項來查看所有參數。 “內部庫”之一是glibc本身( -lc )。

例如,在這里的GCC詳細模式輸出說明中,我們可以看到collect2程序,該程序用於鏈接可執行文件。 在運行中添加了-lgcc -lgcc_eh -lc -lgcc -lgcc_eh庫,並且還鏈接了多個CRT運行時對象:

/usr/lib/gcc-lib/i686/3.3.1/collect2
 --eh-frame-hdr -m elf_i386 -dynamic-linker
 /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o
 /usr/lib/gcc-lib/i686/3.3.1/crtbegin.o
 -L/usr/lib/gcc-lib/i686/3.3.1
 -L/usr/lib/gcc-lib/i686/3.3.1/../../..
  /tmp/ccQynbTm.o  # << this is input file.
 -lgcc -lgcc_eh -lc -lgcc -lgcc_eh
 /usr/lib/gcc-lib/i686/3.3.1/crtend.o
 /usr/lib/crtn.o

PS:我認為最好不要更改文件擴展名(后綴)。 您的p_test.o.i386可以重命名為p_test.i386.o

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM