Есть ли способ определить, что библиотека .a или .so была скомпилирована как независимый от позиции код? - PullRequest
20 голосов
/ 18 августа 2010

Я получаю ошибку компоновки при компиляции библиотеки numpy против lapack, указывающей на необходимость компиляции lapack с -fPICЯ думал, что сделал именно это.Есть ли способ определить, что созданная библиотека lapack не зависит от позиции?

Ответы [ 2 ]

18 голосов
/ 03 января 2011

Вам может повезти с этим ответом , хотя он зависит от платформы и не работает для всех объектных файлов (но если вы код манипулируете указателями каким-либо образом, он должен работать).

Это результат objdump -r для файла, скомпилированного с -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_

, и для файла без PIC:

test.o:     file format elf32-i386
0 голосов
/ 03 января 2011

В общем, у вас нет возможности узнать:

$ 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
...