Ответ 1
В общем, у вас нет способа узнать:
$ 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
Я получаю ошибку связывания при компиляции библиотеки numpy против lapack, указывающей, что мне нужно скомпоновать lapack с -fPIC. Я думал, что сделал именно это. Есть ли способ определить, что созданная библиотека lapack не зависит от позиции?
В общем, у вас нет способа узнать:
$ 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
Возможно, вам повезло с этим ответом, хотя он зависит от платформы и не работает для всех объектных файлов (но если вы код каким-либо образом манипулирует указателями, он должен работать).
Это результат 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