Как скомпилировать статическую библиотеку с -fPIC из boost.python

По умолчанию libboostpython.a скомпилируется без -fPIC. Но я должен сделать расширение python, и это динамическая библиотека с -fPIC, которая ссылается на статические библиотеки. Как скомпилировать статическую библиотеку (libboostpython.a) с помощью -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