2010-08-17 9 views
18

Recibo un error de enlace al compilar la biblioteca numpy contra lapack, lo que indica que necesito compilar lapack con -fPIC. Pensé que había hecho exactamente eso. ¿Hay alguna forma de determinar que la biblioteca lapack producida es independiente de la posición?¿Hay alguna forma de determinar si una biblioteca .a o .so se compiló como código de posición independiente?

+0

posible duplicado, pero no hubo respuesta no parece ser correcta : http://stackoverflow.com/questions/1340402/how-can-i-tell-with-something-like-objdump-if-an-object-file-has-been-built-wit – ergosys

+0

Posible duplicado de [Cómo ¿Puedo decir, con algo como objdump, si un archivo de objeto ha sido creado con -fPIC?] (https: // stackoverf low.com/questions/1340402/how-can-i-tell-with-something-like-objdump-if-an-object-file-has-been-built-wi) –

Respuesta

-5

En general, usted no tiene manera 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 
+5

No es un ejemplo representativo. – Vanuan

14

Es posible que tenga un poco de suerte con this answer, aunque es dependiente de la plataforma y no funciona para todos los archivos de objetos (pero si el código manipula punteros en de cualquier forma, 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 
Cuestiones relacionadas