Как пересобрать с -спос


Я пытался переустановить свой ffmpeg, следуя этому руководству, на моей машине ARM Ubuntu. К сожалению, когда я компилирую программу, которая использует этот lib, я получаю следующий сбой:

/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, как предлагает компилятор, но я понятия не имею, как это сделать. Любая помощь ценится.

4 44

4 ответа:

Короче говоря, ошибка означает, что Вы не можете использовать статическую библиотеку для связи с динамической библиотекой. Правильный способ-это использовать libavcodec, скомпилированные .поэтому вместо того, чтобы .так что библиотека, которую вы пытаетесь построить, будет хорошо связываться.

Самый короткий способ сделать это-добавить --enable-shared в ./configure опции. или даже вы можете попытаться отключить общие (или статические) библиотеки вообще... вы выбираете то, что подходит именно вам!

Взгляните на этой странице.

Вы можете попробовать глобально добавить флаг, используя: export CXXFLAGS="$CXXFLAGS -fPIC"

После шага configure у вас, вероятно, есть makefile. Внутри этого файла Makefile выглядеть на уровне (или похожие). пуф -спосите в конце и запустить снова. Другими словами-fPIC-это опция компилятора, которая должна быть передана компилятору где-то.

Перед компиляцией убедитесь, что "rules.mk" файл правильно включен в Makefile или включить его явно:

"Источник rules.mk"