По умолчанию libboostpython.a
скомпилируется без -fPIC
. Но я должен сделать расширение python, и это динамическая библиотека с -fPIC
, которая ссылается на статические библиотеки.
Как скомпилировать статическую библиотеку (libboostpython.a
) с помощью -fPIC
из boost.python
?
Как скомпилировать статическую библиотеку с -fPIC из boost.python
Ответ 1
Есть несколько вариантов, которые вы могли бы использовать:
- Скомпилируйте boost из исходного кода и передайте дополнительные параметры компилятора в bjam. Например.
bjam ... cxxflags='-fPIC'
. Это скомпилирует каждый файл источника boost как независимый от позиции код. - Использовать boost в форме разделяемых библиотек. В этом случае вы, вероятно, захотите отправить расширенные разделяемые библиотеки вместе с вашим приложением, чтобы убедиться, что используется соответствующая версия boost. Вы можете связать свой исполняемый файл с флагом
'-Wl,-rpath,$ORIGIN'
, так что, когда динамический компоновщик ищет общие библиотеки, необходимые вашему исполняемому файлу, он ищет их в каталоге, где находится исполняемый файл. Подробнее о$ORIGIN
см. man ld.so.
Ответ 2
Обратите внимание, что если вы уже запускаете bjam, как только вам нужно сначала очистить цели полезно также печатать команды, применяя -d + 2:
./bjam clean &&
./bjam -d+2 link=static cxxflags="-fPIC" install