昨天折腾这个半天都总有问题。今天终于找到一个英语的安装攻略。跟着那个一步步安装,很顺利的就装好了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