2010-08-17 24 views
18

编译npacky库时,我收到了链接错误,指出我需要用-fPIC编译lapack。我以为我已经做到了。有没有办法确定生产的lapack库是位置独立的?有没有办法确定.a或.so库已被编译为位置独立代码?

+0

可能重复,但没有答案似乎是正确的:http://stackoverflow.com/questions/1340402/how-can-i-tell-with-something-like-objdump-if-an-object-file-has-been-built-wit – ergosys 2010-08-17 22:40:51

+0

可能重复[How我可以告诉,像objdump这样的东西,如果一个目标文件已经建立了-fPIC?](https:// stackoverf low.com/questions/1340402/how-can-i-tell-with-something-like-objdump-if-an-object-file-has-been-built-wi) – 2017-10-26 05:24:52

回答

-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 
+5

没有代表性的例子。 – Vanuan 2012-06-11 16:46:21

14

你可能有一些运气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_ 

,这是一个文件,而无需事先知情同意:

test.o:  file format elf32-i386 
相关问题