Команда, в которой я работаю, создает общую библиотеку для использования в Python. Эта библиотека полностью С++, и мы используем Boost для отображения на python. Поскольку мы не можем гарантировать, что у наших клиентов установлены библиотеки Boost, мы статически ставим функции, необходимые из Boost в общий файл объекта. Заключительный этап компиляции будет хорошо знаком многим.
g++ -o <output> <objects> -Wl,-Bstatic -lboost_python -lboost_regex ... -Wl,-Bdynamic -shared <other_opts>
Мы традиционно использовали нашу собственную сборку Boost: 1.47. Эта версия сейчас довольно старая, поэтому мы хотим обновить ее. Однако, как ни странно, когда я устанавливаю необходимые объекты с помощью yum в моей системе CentOS 7, я получаю следующую ошибку от gcc:
relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
Ну, я думал, что просто скачаю последнюю версию (CentOS 7 устанавливает Boost 1.53) и сделаю мою собственную сборку. Это, в конце концов, всегда сработало для нас. Я следую инструкциям здесь, но я получил ту же ошибку. Как принудительно использовать -fPIC для даже статических библиотек, которые он создает?