Ho alcune domande sull'ordine di gcc link. GCC man dice che i simboli di ricerca del linker vanno da sinistra a destra senza ripetere la ricerca di default. Qui è la mia prova:alcune domande sull'ordine di ricerca del linker 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
Dal risultato, possiamo vedere l'ordine di .o e .o, .o e .so non fa differenza, solo l'ordine di .o e .a ha l'effetto. Ma questo è incoerente con la pagina man di gcc. Allora perché?
Ho usato -v, ma ancora non capisco perché. Puoi spiegarlo in dettaglio? – D3Hunter
Non posso usare -nodefaultlibs, per alcune funzioni in crt come _start dovrebbero esistere. – D3Hunter
Suppongo che TL, DR-ed prima. In che modo pensi che "it" sia incoerente con la pagina gcc amn? – sehe