Tengo algunas preguntas sobre el orden de enlace gcc. El hombre de GCC dice los símbolos de búsqueda del enlazador de izquierda a derecha sin repetir la búsqueda por defecto. Aquí está mi prueba:algunas preguntas sobre el orden de búsqueda del enlazador 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
A partir del resultado, podemos ver el orden de .oy .o, .oy .so no importa, solo el orden de .o y .a tiene el efecto. Pero eso no es coherente con la página del manual de gcc. ¿Entonces por qué?
He usado -v, pero aún no entiendo por qué. ¿Puedes explicar esto en detalle? – D3Hunter
No puedo usar -nodefaultlibs, para algunas funciones en crt como _start debería existir. – D3Hunter
Supongo que soy TL; DR-ed antes. ¿De qué manera crees que 'esto' es inconsistente con la página de gcc amn? – sehe