gcc - ¿Hay una manera de determinar que una biblioteca.a o.so ha sido compilada como código de posición independiente?
position fpic (2)
En general, no tienes forma de saber:
$ cat a.c
int foo(int x) { return x+1; }
$ gcc -fno-pic a.c -c -o nopic.o
$ gcc -fPIC a.c -c -o pic.o
$ cmp pic.o nopic.o
$ cmp pic.o nopic.o && echo Identical
Identical
Recibo un error de enlace al compilar la biblioteca numpy contra lapack que indica que necesito compilar lapack con -fPIC. Pensé que había hecho justo eso. ¿Hay una manera de determinar que la biblioteca lapack producida es independiente de la posición?
Puede tener algo de suerte con esta respuesta , aunque depende de la plataforma y no funciona para todos los archivos de objetos (pero si el código manipula los punteros de alguna manera, debería funcionar).
Este es el resultado de objdump -r
en un archivo compilado con -fPIC
:
test.o: file format elf32-i386
RELOCATION RECORDS FOR [.text]:
OFFSET TYPE VALUE
00000007 R_386_PC32 __i686.get_pc_thunk.cx
0000000d R_386_GOTPC _GLOBAL_OFFSET_TABLE_
y esto es para un archivo sin PIC:
test.o: file format elf32-i386