2014-08-28 13 views
7

Przygotowuję małą instalację OpenCV na Ubuntu 13.10 i wygląda na to, że coś jest nieszczęśliwe. Byłem przez kilka wersji i zainstalować metod, a kiedy go „zrobić” albo „make -j4” Make ciężarowe wraz ażAwaria OpenCV - "rekompilacja z -fPIC"

/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC 
/usr/local/lib/libavcodec.a: error adding symbols: Bad value 
collect2: error: ld returned 1 exit status 
make[2]: *** [lib/libopencv_videoio.so.3.0.0] Error 1 
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2 
make: *** [all] Error 2 

Każda pomoc jest mile widziana. Jeszcze raz dziękuję, Robert.

+0

Mają ten sam problem. Usunąłem ffmpeg (który usunął libavcodec.a), a następnie skompilowałem i zainstalowałem go ponownie ... ale napotkałem ten sam problem – Pranaysharma

+0

po ostatniej aktywności tutaj sprawdziłem i zobaczyłem, że możesz zrobić mi przysługę i przyjąć moją odpowiedź :) nawet gdy Kilka lat temu ... –

+0

Ah, dzięki za powiadomienie mnie o tym. –

Odpowiedz

13

Miałem ten sam problem podczas kompilowania alpha opencv3 na Ubuntu 14.04 z włączoną opcją FFMPEG. Moja FFMPEG była wersja git skompilowany z ./configure make make install

musiałem przekompilować FFMPEG z ./configure --enable-nonfree --enable-pic --enable-shared

To załatwiło sprawę do mnie i po tej opencv3 sporządzoną w porządku.

+0

Będziesz musiał dodać --enable_shared dla wszystkiego, co skompilujesz FFmpeg z np. X264. –

+0

jak korzystać z tej flagi za pomocą polecenia cmake? –

+0

@Robert Talamantez dlaczego nie zaznaczyłeś tej odpowiedzi jako prawidłowy? To zadziałało dla mnie. – hammeramr

1

Szukałem sposobu na poprawne zbudowanie OpenCV 2.4.11 i to się udało. Jednak prawidłowa wspólny parametr jest --enable-shared, więc linia poleceń jest

./configure --enable-nonfree --enable-pic --enable-shared

Dzięki za posta!

1

OpenCV nie znalazł prawidłowej biblioteki ffmpeg, gdy link /usr/local/lib/libavcodec.a do lib/libopencv_videoio.so.3.0.0.

Należy podać libavcodec.so, ale opencv znajduje tylko libavcodec.a. Dlaczego? istnieje kilka możliwości:

1) Stare/Nowe ffmpeg

Stary ffmpeg tylko statycznej bibliotekami jest zainstalowany w /usr/local/lib i /usr/local/bin. Nowa ffmpeg z udostępnioną biblioteką i dostosowaną ścieżką instalacji jest zainstalowana, ale system tego nie wie. Musisz postępować zgodnie z http://code.opencv.org/issues/1077.

2) Nie podzielił ffmpeg

Należy zainstalować ffmpeg ze wspólną lib jak inni powiedział.

3) nowy ffmpeg nie jest „poprawnie” zainstalować

Jeśli nowy ffmpeg jest zbudowany według kodu źródłowego i na ścieżce Dostosuj, ścieżka powinna być ścieżka bezwzględna. Na przykład:

/configure --prefix="$HOME/lib/ffmpeg_build" 

Jeżeli względna ścieżka jest ustawiony, względna ścieżka zostanie zainstalowany w pliku ustawień ffmpeg i OpenCV nie znajdzie odpowiednich bibliotekami według pliku. Być może chcesz zajrzeć do pliku CMakeCache w katalogu źródłowym opencv, który rejestruje potrzebne ścieżki bibliotek w budynku.