Is there a way to determine that a .a or .so library has been compiled as position indepenent code?
Asked Answered
G

2

22

I am getting a linking error when compiling the numpy library against lapack indicating I need to compile lapack with -fPIC. I thought I had done just that. Is there a way to determine that the produced lapack library is position independent?

Gluconeogenesis answered 17/8, 2010 at 21:55 Comment(2)
possible duplicate, but no answer there seems to be correct: #1340902Nave
Possible duplicate of How can I tell, with something like objdump, if an object file has been built with -fPIC?Mucro
A
-3

In general, you have no way of knowing:

$ 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
Arable answered 3/1, 2011 at 15:32 Comment(1)
Not a representative example.Flagstone
D
21

You may have some luck with this answer, although it's platform dependent and doesn't work for all object files (but if you code manipulates pointers in any way, it should work).

This is the result of objdump -r on a file compiled with -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_

and this is for a file without PIC:

test.o:     file format elf32-i386
Dias answered 3/1, 2011 at 15:38 Comment(0)
A
-3

In general, you have no way of knowing:

$ 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
Arable answered 3/1, 2011 at 15:32 Comment(1)
Not a representative example.Flagstone

© 2022 - 2024 — McMap. All rights reserved.