Как узнать, собран ли двоичный файл совместно используемой библиотеки с опцией -fPIC

Я работаю в среде встроенного Linux. У меня есть набор общих библиотек в двоичном формате (у меня нет исходного кода и Makefile), и я хочу проверить, были ли они скомпилированы с опцией -fPIC или нет. Есть ли какой-либо инструмент или подход для проверки, был ли скомпилирован двоичный файл совместно используемой библиотеки -fPIC?

С уважением.

1 ответ

Вы не сможете создать разделяемую библиотеку без -fPIC. Он сообщит что-то вроде

      /usr/bin/ld: /tmp/ccbCwoJo.o: relocation R_X86_64_PC32 against symbol `_Z1ff' can not be used when making a shared object; recompile with -fPIC

Но если вы действительно хотите что-то проверить, grep для PLT вызывает:

      $ objdump -d a.out | g @plt
 628:   e8 23 00 00 00          callq  650 <__gmon_start__@plt>
0000000000000650 <__gmon_start__@plt>:
0000000000000660 <__cxa_finalize@plt>:
0000000000000670 <_Z1ff@plt>:
0000000000000680 <cosf@plt>:
0000000000000690 <sinf@plt>:
 72e:   e8 2d ff ff ff          callq  660 <__cxa_finalize@plt>
 7df:   e8 8c fe ff ff          callq  670 <_Z1ff@plt>
 819:   e8 62 fe ff ff          callq  680 <cosf@plt>
 82e:   e8 5d fe ff ff          callq  690 <sinf@plt>
Другие вопросы по тегам