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)