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

Set*_*jmp 21 gcc position fpic

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

小智 19

你可能对这个答案有一些好运,虽然它是依赖于平台的,并不适用于所有目标文件(但如果你以任何方式编写操作指针,它应该工作).

这是使用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_
Run Code Online (Sandbox Code Playgroud)

这是针对没有PIC的文件:

test.o:     file format elf32-i386
Run Code Online (Sandbox Code Playgroud)


F'x*_*F'x -3

一般来说,你无法知道:

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 不具有代表性。 (6认同)