g ++ -fPIC применим для исполняемых файлов в дополнение к общим библиотекам?

Я понимаю опцию g ++ -fPIC как хорошо объясненную в: GCC -FPIC опция
У меня есть много исходных файлов, которыми управляют через makefile для сборки. Трудно отделить исходные файлы, которые предназначены для того, чтобы быть частью исполняемой или разделяемой библиотеки. Могу ли я использовать опцию -fPIC g ++ для любого файла, который идет при компиляции, как:

g++ -c -fPIC ....

и позже, если это общая библиотека, ссылка на -sharedиначе без -shared для исполняемого файла.

2

Решение

Можно создавать исполняемые файлы с -fPIC но это может привести к снижению производительности, так как компилятор сделает более консервативные предположения, например, о включении (чтобы позволить вставка символа времени выполнения). Чтобы создать независимый от позиции исполняемый файл, лучше использовать -fPIE флаг (большинство современных дистрибутивов, например Ubuntu строить с ним по умолчанию сейчас).

В любом случае, если вы действительно не заботитесь о производительности, вам нужно будет скомпилировать ваши файлы дважды, с разными флагами.

1

Другие решения

Могу ли я использовать опцию -fPIC для g ++ для любого файла, который идет на компиляцию?

Да. Если дано что-то, например, файл сборки, это не будет иметь никакого эффекта.

[…] и позже, если это общая библиотека, ссылка с -shared?

Да.

-1

По вопросам рекламы [email protected]