Я понимаю опцию g ++ -fPIC как хорошо объясненную в: GCC -FPIC опция
У меня есть много исходных файлов, которыми управляют через makefile
для сборки. Трудно отделить исходные файлы, которые предназначены для того, чтобы быть частью исполняемой или разделяемой библиотеки. Могу ли я использовать опцию -fPIC g ++ для любого файла, который идет при компиляции, как:
g++ -c -fPIC ....
и позже, если это общая библиотека, ссылка на -shared
иначе без -shared
для исполняемого файла.
Можно создавать исполняемые файлы с -fPIC
но это может привести к снижению производительности, так как компилятор сделает более консервативные предположения, например, о включении (чтобы позволить вставка символа времени выполнения). Чтобы создать независимый от позиции исполняемый файл, лучше использовать -fPIE
флаг (большинство современных дистрибутивов, например Ubuntu строить с ним по умолчанию сейчас).
В любом случае, если вы действительно не заботитесь о производительности, вам нужно будет скомпилировать ваши файлы дважды, с разными флагами.
Могу ли я использовать опцию -fPIC для g ++ для любого файла, который идет на компиляцию?
Да. Если дано что-то, например, файл сборки, это не будет иметь никакого эффекта.
[…] и позже, если это общая библиотека, ссылка с -shared?
Да.