Да, 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
РЕДАКТИРОВАТЬ
Технически говоря, вы может компилируете разделяемую библиотеку без -fPIC
, если ни одна из ее функций не вызывает другие функции или не обращается к глобальным переменным. Но в этом случае сгенерированный код будет таким же, как у -fPIC
.
Некоторые архитектуры (не обязательно «современные») просто не имеют режимов абсолютной адресации, там весь код позиционно независим.
Я был конкретен, как упомянул @yugr, потому что это конкретная среда, с которой я имею дело. Но эта информация тоже полезна.