Ошибка "Перекомпилировать с -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 весьма полезны при отладке сборок.