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

По умолчанию, libboostpython.a составляется без -fPIC, Но я должен сделать расширение Python, и это динамическая библиотека с -fPIC это ссылки на статические библиотеки.
Как я могу скомпилировать статическую библиотеку (libboostpython.a) с -fPIC от boost.python?

13

Решение

Есть несколько вариантов, которые вы можете использовать:

  • Скомпилируйте поддержку из исходного кода и передайте дополнительные параметры компилятора в bjam. Например. bjam ... cxxflags='-fPIC', Это скомпилирует каждый исходный файл форсирования как независимый от позиции код.
  • Используйте boost в виде разделяемых библиотек. В этом случае вы, вероятно, захотите поставлять общие библиотеки boost вместе с вашим приложением, чтобы убедиться, что используется соответствующая версия boost. Вы можете связать свой исполняемый файл с '-Wl,-rpath,$ORIGIN' флаг, так что когда динамический компоновщик ищет общие библиотеки, необходимые для вашего исполняемого файла, он ищет их в каталоге, где находится исполняемый файл. Увидеть man ld.so для более подробной информации о $ORIGIN,
17

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

Обратите внимание, что если вы уже запустили bjam, вам нужно сначала очистить цели
также полезно распечатать команды, применив -d + 2:

./bjam clean &&
./bjam -d+2 link=static cxxflags="-fPIC" install
1