-FPIC подразумевается на современных платформах - PullRequest
0 голосов
/ 02 мая 2018

Я хочу проверить, была ли общая библиотека скомпилирована с флагом -fPIC. Каковы возможные способы (в Linux, x86_64), чтобы проверить это?

Подразумевается ли -fPIC (что делает проверку избыточной?)

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Некоторые архитектуры (не обязательно "современные") просто не имеют абсолютных режимов адресации, весь код там не зависит от позиции.

0 голосов
/ 02 мая 2018

Да, GCC не позволит вам связывать разделяемую библиотеку без -fPIC, поэтому вам не нужно ничего проверять:

$ gcc tmp.c -shared
/usr/bin/ld: /tmp/ccqQVR9Y.o: relocation R_X86_64_32 against `compare' can not be used when making a shared object; recompile with -fPIC
/tmp/ccqQVR9Y.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
$ gcc tmp.c -shared -fPIC

EDIT

Технически говоря, вы можете скомпилировать совместно используемую библиотеку без -fPIC, если ни одна из ее функций не вызывает другие функции или не обращается к глобальным переменным. Но в этом случае сгенерированный код будет таким же, как с -fPIC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...