2010-08-17 28 views
18

Je reçois une erreur de liaison lors de la compilation de la bibliothèque numpy contre lapack indiquant que j'ai besoin de compiler lapack avec -fPIC. Je pensais que j'avais fait juste cela. Existe-t-il un moyen de déterminer que la bibliothèque de lapa produite est indépendante de la position?Existe-t-il un moyen de déterminer qu'une bibliothèque .a ou .so a été compilée en tant que code indépendant de la position?

+0

double possible, mais pas de réponse, il semble être correct : http://stackoverflow.com/questions/1340402/how-can-i-tell-with-something-like-objdump-if-an-object-file-has-been-built-wit – ergosys

+0

Possible duplicata de [Comment puis-je dire, avec quelque chose comme objdump, si un fichier objet a été construit avec -fPIC?] (https: // stackoverf low.com/questions/1340402/how-can-i-tell-with-something-like-objdump-if-an-object-file-has-been-built-wi) –

Répondre

-5

En général, vous avez aucun moyen de savoir:

$ 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

Pas un exemple représentatif. – Vanuan

14

Vous pouvez avoir un peu de chance avec this answer, bien qu'il soit dépendant de la plateforme et ne fonctionne pas pour tous les fichiers objets (mais si vous codez manipule des pointeurs dans de toute façon, ça devrait marcher).

Ceci est le résultat de objdump -r sur un fichier compilé avec -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_ 

et c'est un fichier sans PIC:

test.o:  file format elf32-i386