Ошибка "Перекомпилировать с -fPIC" сохраняется даже после добавления флага компиляции -fPIC

Я скачал немного C++, который я хочу скомпилировать из исходного кода. После запуска cmake ../src а потом make из командной строки, находясь в каталоге сборки, я получаю следующую ошибку:

/usr/bin/ld: /usr/local/lib/libBulletCollision.a(btDbvtBroadphase.o):
relocation R_X86_64_32S against `_ZTV16btDbvtBroadphase' can not be used when making a shared object;
recompile with -fPIC

Я считаю, что это как-то связано с попыткой создать общую библиотеку, но не обеспечивает необходимую память для этого (хотя я не до конца понимаю это...). В любом случае, следуя совету, который я видел, я попробовал следующее:

make CXXFLAGS='-fPIC'

Тем не менее, это дает мне точно такую ​​же ошибку, как и раньше. Любые идеи относительно того, почему это не решило проблему?

1 ответ

Решение

Я считаю, что Марк прав, когда говорит, что ошибка libBulletCollision.a, Вы строите .so построен с -fPIC но связывая против .a что не использовал -fPIC, Вам нужно будет либо изменить и построить статическую библиотеку, либо пересобрать и установить новую зависимую libBulletCollision.a с помощью -fPIC,

Кстати, вы должны добавить -fPIC пометить вашу сборку более постоянным способом на этапе настройки cmake, а не таким переходным способом CXXFLAGS при беге make,

Также используя make VERBOSE=1 сгенерированные cmake сборки makefile весьма полезны при отладке сборок.

Другие вопросы по тегам