有没有办法确定.a或.so库已被编译为位置独立代码?

时间:2010-08-17 21:55:40

标签: gcc position fpic

我在针对lapack编译numpy库时遇到链接错误,表明我需要使用-fPIC编译lapack。我以为我做到了那一点。有没有办法确定生成的lapack库是否与位置无关?

2 个答案:

答案 0 :(得分:18)

你可能会对this answer有一些好运,虽然它依赖于平台并且不适用于所有目标文件(但如果你以任何方式编写操作指针,它应该可以工作)。

这是使用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

答案 1 :(得分:-5)

一般来说,你无从知晓:

$ 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