Я пытался переустановить мой ffmpeg, после этого руководство, на моей машине ARM Ubuntu. К сожалению, когда я компилирую программу, которая использует эту библиотеку, я получаю следующую ошибку:
/usr/bin/ld: /usr/local/lib/libavcodec.a(amrnbdec.o): relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
Теперь я хотел бы перекомпилировать его с -fPIC
как предлагает компилятор, но я понятия не имею, как. Любая помощь приветствуется.
короче говоря, ошибка означает, что вы нельзя использовать статическую библиотеку для связи с динамической.
Правильный способ — это скомпилировать libavcodec в .so вместо .a, так что другая библиотека .so, которую вы пытаетесь собрать, будет хорошо связываться.
самый короткий способ сделать это добавить --enable-shared
в ./configure
опции.
или даже вы можете попытаться отключить общие (или статические) библиотеки вообще … вы выбираете то, что подходит именно вам!
Посмотри на эта страница.
Вы можете попробовать глобально добавить флаг, используя: export CXXFLAGS="$CXXFLAGS -fPIC"
После этапа настройки у вас, вероятно, есть make-файл. Внутри этого make-файла ищите CFLAGS (или аналогичные). puf -fPIC в конце и снова запустить make. Другими словами, -fPIC — это опция компилятора, которую нужно где-то передать компилятору.
Перед компиляцией убедитесь, что файл «rules.mk» правильно включен в Makefile или включите его явно:
«source rules.mk»