Да, 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
.