Странная ошибка компоновщика при компиляции OpenCV2.3.1 в Ubuntu 11.10 - PullRequest
7 голосов
/ 03 декабря 2011

Я пытаюсь скомпилировать OpenCV версии 2.3.1 на Ubuntu 11.10, следуя инструкциям, описанным здесь . Я получаю следующую ошибку. Не могу понять, что происходит ... /usr/local/lib/libavcodec.a существует, но компоновщик не может ссылаться на него или что-то еще?

ошибка:

[ 20%] Built target pch_Generate_opencv_highgui
Linking CXX shared library ../../lib/libopencv_highgui.so
/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32S against `av_destruct_packet' 
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

Ответы [ 3 ]

6 голосов
/ 04 декабря 2011

Проблема в том, что вы пытаетесь связать libopencv_highgui.so с libavcodec.a.Последний построен из кода, скомпилированного без -fPIC (что вполне обычно), и такой код нельзя связать с общими библиотеками на x86_64.

. Вы можете выбрать:

  • Получите libavcodec.so и организуйте ссылку на него, или
  • Полностью удалите libavcodec или -lavcodec из линии связи.

Для первого вы, скорее всего,просто нужно установить пакет libavcodec-dev .

Если вы сделаете второе, вам все равно придется упорядочить символы, которые libopencv_highgui.so нужны из libavcodec, чтобы они были доступны во время выполнения.Вы можете добиться этого, связав основной исполняемый файл с libavcodec (архивным или общим вариантом).

4 голосов
/ 05 августа 2013

Я мог бы предположить, что сначала запустите sudo apt-get remove libavcodec, а затем переустановите с помощью sudo apt-get install libopencv-dev

Однажды у меня возникла похожая проблема, и вышеописанная проблема разрешила

2 голосов
/ 12 января 2015

Запустив 64-битную версию Ubuntu, вы должны сконфигурировать и собрать ffmpeg с ./configure --enable-shared --enable-pic, как описано в шагах 7b и 8b

...