gccのリンク順についていくつか質問があります。 GCCの人間は、デフォルトで繰り返し検索することなく、左から右へリンカーの検索シンボルを言う。ここに私のテストです:結果からGCCリンカーの検索順序に関するいくつかの質問
main.cの
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("HELLO WROLD\n");
return 0;
}
printf.c
#include <stdio.h>
#include <stdlib.h>
int printf(const char *fmt, ...)
{
write(1, "AAA\n", 4);
}
[[email protected] testcode]# gcc -c -fno-builtin-printf *.c
[[email protected] testcode]# gcc -o test main.o printf.o
[[email protected] testcode]# ./test
AAA
[[email protected] testcode]# gcc -o test printf.o main.o
[[email protected] testcode]# ./test
AAA
[[email protected] testcode]# ar rcs libprintf.a printf.o
[[email protected] testcode]# gcc -o test libprintf.a main.o
[[email protected] testcode]# ./test
HELLO WROLD
[[email protected] testcode]# gcc -o test main.o libprintf.a
[[email protected] testcode]# ./test
AAA
[[email protected] testcode]# gcc -shared -o libprintf.so printf.o
[[email protected] testcode]# gcc -o test libprintf.so main.o
[[email protected] testcode]# export LD_LIBRARY_PATH=.
[[email protected] testcode]# ./test
AAA
[[email protected] testcode]# gcc -o test main.o libprintf.so
[[email protected] testcode]# ./test
AAA
、我々は.oのとの.o、.oのとの順序を見ることができるの.so差をつけないと、.oと.aの順序だけが効果を持ちます。しかし、それはgccのマニュアルページとは矛盾しています。なぜ?
私は-vを使用しましたが、それでも私は理由を理解していません。これについて詳しく説明できますか? – D3Hunter
-nodefaultlibsは使用できません。たとえば、_startのようなcrtの一部の関数が存在する必要があります。 – D3Hunter
私はTL; DR-ed前に推測します。どのようにして 'それ'がgccのamnページと矛盾していると思いますか? – sehe