64位Ubuntu系统安装OpenCV 2.4.x+ffmpeg 完美解决方案

昨天折腾这个半天都总有问题。今天终于找到一个英语的安装攻略。跟着那个一步步安装,很顺利的就装好了OpenCV2.4.3+ffmepg。总结一下,昨天的博客中提到的方法主要有两点问题最终导致失败:

1. 在64位系统下,配置x264等外部库,需要使用-fPIC标记进行configure

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

2. 在64位系统下,配置ffmpeg时,不需要加 -fPIC,但是需要设置 -enable-shared

所以,可以按照如下方式卸载已有的ffmpeg并重新配置安装。方法来源于http://www.ozbotz.org/opencv-installation/

如果还有问题,可以参考另一篇答疑帖子:http://ozbotz.org/opencv-install-troubleshooting/

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
The Installation Procedure

To install and configure OpenCV 2.4.1, complete the following steps. The commands shown in each step can be copy and pasted directly into a Linux command line.


Recommend using OpenCV2.4.10 or higher version if using CUDA-6.5 or higher.


Remove any installed versions of ffmpeg and x264.


sudo apt-get remove ffmpeg x264 libx264-dev



Get all the dependencies for x264 and ffmpeg.

sudo apt-get update
sudo apt-get install build-essential checkinstall git cmake libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html yasm zlib1g-dev



Download and install gstreamer.

sudo apt-get install libgstreamer0.10-0 libgstreamer0.10-dev gstreamer0.10-tools gstreamer0.10-plugins-base libgstreamer-plugins-base0.10-dev gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg



Download and install gtk.

sudo apt-get install libgtk2.0-0 libgtk2.0-dev


Download and install libjpeg.

sudo apt-get install libjpeg8 libjpeg8-dev



Create a directory to hold source code.

cd ~
mkdir src



Download and install install x264.
Download a recent stable snapshot of x264 from ftp://ftp.videolan.org/pub/videolan/x264/snapshots/. The exact version does not seem to matter. To write this guide, I used version x264-snapshot-20120528-2245-stable.tar.bz2, but I have used previous versions too.

cd ~/src
wget ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20120528-2245-stable.tar.bz2
tar xvf x264-snapshot-20120528-2245-stable.tar.bz2
cd x264-snapshot-20120528-2245-stable

Configure and build the x264 libraries.

./configure --enable-static
make
sudo make install

IMPORTANT: If you are running a 64-bit version of Ubuntu, you must configure x264 as shown in the following command:

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

The -shared and -pic options might also be required when you compile for some other architectures, such as ARM. You know you need these options if you get the following error when compiling OpenCV:
[ 25%] Building CXX object modules/highgui/CMakeFiles/opencv_highgui.dir/src/bitstrm.cpp.o
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





Download and install install ffmpeg.
Download ffmpeg version 0.11.x from http://ffmpeg.org/download.html.
cd ~/src
wget http://ffmpeg.org/releases/ffmpeg-0.11.tar.bz2
tar xvf ffmpeg-0.11.tar.bz2
cd ffmpeg-0.11

Configure and build ffmpeg.

./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab
make
sudo make install

IMPORTANT: Just like with x264 in the previous step, you must configure ffmpeg with the -shared option if you are running a 64-bit version of Ubuntu or some other architectures, such as ARM. The -pic option is not necessary for ffmpeg.

./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-shared

if after make install, appear error: mkdir: cannot create directory `/usr/local/share/man/man1': File exists, referhttp://blog.csdn.net/kaka20080622/article/details/40260369

if input ffmpeg and occurs error: ffmpeg: error while loading shared libraries:libavdevice.so.52:cannot open shared object, refer http://blog.csdn.net/kaka20080622/article/details/40260423




Download and install install a recent version of v4l (video for linux) from http://www.linuxtv.org/downloads/v4l-utils/. For this guide I used version 0.8.8.

cd ~/src

wget http://www.linuxtv.org/downloads/v4l-utils/v4l-utils-0.8.8.tar.bz2

tar xvf v4l-utils-0.8.8.tar.bz2
cd v4l-utils-0.8.8
make
sudo make install



Download and install install OpenCV 2.4.1.
Download OpenCV version 2.4.1 from http://sourceforge.net/projects/opencvlibrary/files/

cd ~/src
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.1/OpenCV-2.4.1.tar.bz2
tar xvf OpenCV-2.4.1.tar.bz2

Create a new build directory and run cmake:

cd OpenCV-2.4.1/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE ..

Verify that the output of cmake includes the following text:
found gstreamer-base-0.10
GTK+ 2.x: YES
FFMPEG: YES
GStreamer: YES
V4L/V4L2: Using libv4l
Build and install OpenCV.
make
sudo make install

Note: if using CUDA-6.5, then compile opencv2.4.9 or below, an error: gpu/src/nvidia/core/NCVPixelOperations.hpp(52): error: a storage class is not allowed in an explicit specialization, solution for this is to using higher version of OpenCV, such as opencv.2.4.10 or opencv3.0

Configure Linux.
Tell linux where the shared libraries for OpenCV are located by entering the following shell command:

export LD_LIBRARY_PATH=/usr/local/lib

Add the command to your .bashrc file so that you don’t have to enter every time your start a new terminal.

Alternatively, you can configure the system wide library search path. Using your favorite editor, add a single line containing the text
/usr/local/lib to the end of a file named /etc/ld.so.conf.d/opencv.conf

. In the standard Ubuntu install, the opencv.conf file does not exist; you need to create it. Using vi, for example, enter the following commands:
sudo vi /etc/ld.so.conf.d/opencv.conf
G
o
/usr/local/lib
<Esc>
:wq!

After editing the opencv.conf file, enter the following command:

sudo ldconfig /etc/ld.so.conf

.
Using your favorite editor, add the following two lines to the end of /etc/bash.bashrc:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH



After completing the previous steps, your system should be ready to compile code that uses the OpenCV libraries. The following example shows one way to compile code for OpenCV:
g++ `pkg-config opencv --cflags` my_code.cpp -o my_code `pkg-config opencv --libs

你可能感兴趣的:(64位Ubuntu系统安装OpenCV 2.4.x+ffmpeg 完美解决方案)