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?
18
A
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
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
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) –