Ich bekomme einen Linkfehler beim Kompilieren der numpy Bibliothek gegen lapack, was bedeutet, dass ich lapack mit -fPIC kompilieren muss. Ich dachte, ich hätte genau das getan. Gibt es eine Möglichkeit festzustellen, dass die produzierte lapack-Bibliothek positionsunabhängig ist?Gibt es eine Möglichkeit festzustellen, dass eine .a oder .so Bibliothek als positionsunabhängiger Code kompiliert wurde?
18
A
Antwort
-5
In der Regel haben Sie keine Möglichkeit zu wissen:
$ 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
Kein repräsentatives Beispiel. – Vanuan
14
Sie etwas Glück mit this answer haben kann, obwohl es plattformabhängig ist und funktioniert nicht für alle Objektdateien (aber wenn Sie Code manipuliert Zeiger in auf jeden Fall sollte es funktionieren).
Dies ist das Ergebnis von objdump -r
auf eine Datei mit -fPIC
zusammengestellt:
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_
und das ist für eine Datei ohne PIC:
test.o: file format elf32-i386
möglich Duplikat, aber keine Antwort scheint korrekt zu sein : http://stackoverflow.com/questions/1340402/how-can-i-tell-with-something-like-objdump-if-an-object-file-has-benen-built-wit – ergosys
Mögliches Duplikat von [How kann ich mit etwas wie objdump sagen, ob eine Objektdatei mit -fPIC erstellt wurde?] (https: // stackoverf low.com/questions/1340402/how-can-i-tell-with-something-like-objdump-if-an-object-file-has-benen-built-wi) –