2017-06-15 48 views
1

成功地为我的手臂板建立Qt5.5.1后,我正在开始交叉编译opencv。以下是具体步骤:Openfv交叉编译与ffmpeg和其他第三方的手臂板

首先,我crosscompile的3rdParty:

a.libz

[email protected]:/home/newdisk$ sudo tar -zvxf zlib-1.2.8.tar.gz 
[email protected]:/home/newdisk$ cd zlib-1.2.8 
[email protected]:/home/newdisk/zlib-1.2.8$ sudo ./configure --prefix=/home/newdisk/optnew/opencv-rely -shared 
[email protected]:/home/newdisk/zlib-1.2.8$ sudo vi Makefile 

,并在一些细节etit的Makefile:

#Makefile 
CC=/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-gcc 
LDSHARED= /home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map 
AR=/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-ar 
RANLIB=arm-linux-ranlib 

最后一步运行make和make install:

[email protected]:/home/newdisk/zlib-1.2.8$ sudo make 
[email protected]:/home/newdisk/zlib-1.2.8$ sudo make install 

b.libjpeg

[email protected]:/home/newdisk$ sudo tar -zvxf jpegsrc.v9.tar.gz 
[email protected]:/home/newdisk$ cd jpeg-9 
[email protected]:/home/newdisk/jpeg-9$ sudo CC=/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/home/newdisk/optnew/opencv-rely --enable-shared --enable-static 
[email protected]:/home/newdisk/jpeg-9$ sudo make 
[email protected]:/home/newdisk/jpeg-9$ sudo make install 

c.libpng

[email protected]:/home/newdisk$ sudo xz -d libpng-1.6.29.tar.xz 
[email protected]:/home/newdisk$ sudo tar -xvf libpng-1.6.29.tar 
[email protected]:/home/newdisk$ cd libpng-1.6.29 
[email protected]:/home/newdisk/libpng-1.6.29$ sudo CC=/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/home/newdisk/optnew/opencv-rely --enable-shared --enable-static 
[email protected]:/home/newdisk/libpng-1.6.29$ sudo make 
[email protected]:/home/newdisk/libpng-1.6.29$ sudo make install 

d.yasm

[email protected]:/home/newdisk$ sudo tar -zvxf yasm-1.3.0.tar.gz 
[email protected]:/home/newdisk$ cd yasm-1.3.0 
[email protected]:/home/newdisk/yasm-1.3.0$ sudo CC=/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-gcc ./configure --prefix=/home/newdisk/optnew/opencv-rely --host=arm-linux 
[email protected]:/home/newdisk/yasm-1.3.0$ sudo make 
[email protected]:/home/newdisk/yasm-1.3.0$ sudo make install 

e.libx264

[email protected]:/home/newdisk$ sudo tar -jxvf last_x264.tar.bz2 
[email protected]:/home/newdisk$ cd x264-snapshot-20170612-2245 
[email protected]:/home/newdisk/x264-snapshot-20170612-2245$ sudo CC=/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-gcc ./configure --enable-shared --host=arm-linux --disable-asm --prefix=/home/newdisk/optnew/opencv-rely 
[email protected]:/home/newdisk/x264-snapshot-20170612-2245$ sudo make 
[email protected]:/home/newdisk/x264-snapshot-20170612-2245$ sudo make install 

f.libxvid

[email protected]:/home/newdisk$ cd xvidcore-1.3.3 
[email protected]:/home/newdisk/xvidcore-1.3.3$ cd build/generic 
[email protected]:/home/newdisk/xvidcore-1.3.3/build/generic$ sudo CC=/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-gcc ./configure --prefix=/home/newdisk/optnew/opencv-rely --host=arm-linux --disable-assembly 
[email protected]:/home/newdisk/xvidcore-1.3.3/build/generic$ sudo make 
[email protected]:/home/newdisk/xvidcore-1.3.3/build/generic$ sudo make install 

g.ffmpeg

[email protected]:/home/newdisk$ sudo tar -jvxf ffmpeg-3.3.2.tar.bz2 
[email protected]:/home/newdisk$ cd ffmpeg-3.3.2 
[email protected]:/home/newdisk/ffmpeg-3.3.2$ 
sudo ./configure --prefix=/home/newdisk/optnew/opencv-rely --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi-gcc --enable-swscale --extra-ldflags=-L/home/newdisk/optnew/opencv-rely/lib --extra-cflags=-I/home/newdisk/optnew/opencv-rely/include 
[email protected]:/home/newdisk/ffmpeg-3.3.2$ sudo make 
[email protected]:/home/newdisk/ffmpeg-3.3.2$ sudo make install 

有中的3rdParty crosscompile没有问题。 接着,OpenCV的crosscompile:

[email protected]:/home/newdisk$ sudo unzip opencv-3.1.0.zip 
[email protected]:/home/newdisk$ cd opencv-3.1.0 
[email protected]:/home/newdisk/opencv-3.1.0$ sudo mkdir BuildOpencv 
[email protected]:/home/newdisk/opencv-3.1.0$ cd BuildOpencv 
[email protected]:/home/newdisk/opencv-3.1.0/BuildOpencv$ sudo vim toolchain.cmake 
#toolchain.cmake 
###########user defined############# 
set(CMAKE_SYSTEM_NAME Linux) 
set(CMAKE_SYSTEM_PROCESSOR arm) 
set(CMAKE_C_COMPILER /home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc) 
set(CMAKE_CXX_COMPILER /home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-g++) 
###########user defined############# 
set(CMAKE_FIND_ROOT_PATH /home/newdisk/optnew/opencv-rely) 
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 
###################################### 

然后我运行cmake:

[email protected]:/home/newdisk/opencv-3.1.0/BuildOpencv$ sudo cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ../ 

下面是结果:

-- Detected version of GNU GCC: 45 (405) 
-- Found ZLIB: /home/newdisk/optnew/opencv-rely/lib/libz.so (found suitable version "1.2.8", minimum required is "1.2.3") 
-- Could NOT find TIFF (missing: TIFF_LIBRARY TIFF_INCLUDE_DIR) 
-- Could NOT find Jasper (missing: JASPER_LIBRARIES) (found version "1.900.1") 
-- Found ZLIB: /home/newdisk/optnew/opencv-rely/lib/libz.so (found version "1.2.8") 
-- checking for module 'gtk+-3.0' 
-- package 'gtk+-3.0' not found 
-- checking for module 'gstreamer-base-1.0' 
-- package 'gstreamer-base-1.0' not found 
-- checking for module 'gstreamer-video-1.0' 
-- package 'gstreamer-video-1.0' not found 
-- checking for module 'gstreamer-app-1.0' 
-- package 'gstreamer-app-1.0' not found 
-- checking for module 'gstreamer-riff-1.0' 
-- package 'gstreamer-riff-1.0' not found 
-- checking for module 'gstreamer-pbutils-1.0' 
-- package 'gstreamer-pbutils-1.0' not found 
-- checking for module 'gstreamer-base-0.10' 
-- package 'gstreamer-base-0.10' not found 
-- checking for module 'gstreamer-video-0.10' 
-- package 'gstreamer-video-0.10' not found 
-- checking for module 'gstreamer-app-0.10' 
-- package 'gstreamer-app-0.10' not found 
-- checking for module 'gstreamer-riff-0.10' 
-- package 'gstreamer-riff-0.10' not found 
-- checking for module 'gstreamer-pbutils-0.10' 
-- package 'gstreamer-pbutils-0.10' not found 
-- Looking for linux/videodev.h 
-- Looking for linux/videodev.h - found 
-- Looking for linux/videodev2.h 
-- Looking for linux/videodev2.h - found 
-- Looking for sys/videoio.h 
-- Looking for sys/videoio.h - not found 
-- checking for module 'libavresample' 
-- package 'libavresample' not found 
-- Looking for libavformat/avformat.h 
-- Looking for libavformat/avformat.h - not found 
-- Looking for ffmpeg/avformat.h 
-- Looking for ffmpeg/avformat.h - not found 
-- checking for module 'libgphoto2' 
-- package 'libgphoto2' not found 
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
-- To enable PlantUML support, set PLANTUML_JAR environment variable or pass -DPLANTUML_JAR=<filepath> option to cmake 
-- Found PythonInterp: /usr/bin/python2.7 (found suitable version "2.7.6", minimum required is "2.7") 
-- Could NOT find PythonLibs (missing: PYTHON_LIBRARIES) (found suitable version "2.7.6", minimum required is "2.7") 
-- Cannot probe for Python/Numpy support (because we are cross-compiling OpenCV) 
-- If you want to enable Python/Numpy support, set the following variables: 
-- PYTHON2_INCLUDE_PATH 
-- PYTHON2_LIBRARIES 
-- PYTHON2_NUMPY_INCLUDE_DIRS 
-- PYTHON3_INCLUDE_PATH 
-- PYTHON3_LIBRARIES 
-- PYTHON3_NUMPY_INCLUDE_DIRS 
-- Found PythonInterp: /usr/bin/python3.4 (found suitable version "3.4.3", minimum required is "3.4") 
-- Could NOT find PythonLibs (missing: PYTHON_LIBRARIES) (Required is at least version "3.4") 
-- Cannot probe for Python/Numpy support (because we are cross-compiling OpenCV) 
-- If you want to enable Python/Numpy support, set the following variables: 
-- PYTHON2_INCLUDE_PATH 
-- PYTHON2_LIBRARIES 
-- PYTHON2_NUMPY_INCLUDE_DIRS 
-- PYTHON3_INCLUDE_PATH 
-- PYTHON3_LIBRARIES 
-- PYTHON3_NUMPY_INCLUDE_DIRS 
-- Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH) 
-- Could NOT find Matlab (missing: MATLAB_MEX_SCRIPT MATLAB_INCLUDE_DIRS MATLAB_ROOT_DIR MATLAB_LIBRARIES MATLAB_LIBRARY_DIRS MATLAB_MEXEXT MATLAB_ARCH MATLAB_BIN) 
-- 
-- General configuration for OpenCV 3.1.0 
===================================== 
-- Version control:    unknown 
-- 
-- Platform: 
--  Host:      Linux 3.16.0-77-generic i686 
--  Target:      Linux arm 
--  CMake:      2.8.12.2 
--  CMake generator:    Unix Makefiles 
--  CMake build tool:   /usr/bin/make 
--  Configuration:    Release 
-- 
-- C/C++: 
--  Built as dynamic libs?:  YES 
--  C++ Compiler:    /home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-g++ (ver 4.5.1) 
--  C++ flags (Release):   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -DNDEBUG 
--  C++ flags (Debug):   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG -D_DEBUG 
--  C Compiler:     /home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc 
--  C flags (Release):   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fvisibility=hidden -O3 -DNDEBUG -DNDEBUG 
--  C flags (Debug):    -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fvisibility=hidden -g -O0 -DDEBUG -D_DEBUG 
--  Linker flags (Release):  
--  Linker flags (Debug):   
--  Precompiled headers:   YES 
--  Extra dependencies:   /home/newdisk/optnew/opencv-rely/lib/libjpeg.so /home/newdisk/optnew/opencv-rely/lib/libpng.so /home/newdisk/optnew/opencv-rely/lib/libz.so gtk-x11-2.0 gdk-x11-2.0 atk-1.0 gio-2.0 pangoft2-1.0 pangocairo-1.0 gdk_pixbuf-2.0 cairo pango-1.0 fontconfig gobject-2.0 freetype gthread-2.0 glib-2.0 dc1394 v4l1 v4l2 avcodec avformat avutil swscale dl m pthread rt 
--  3rdparty dependencies:  libwebp libtiff libjasper IlmImf 
-- 
-- OpenCV modules: 
--  To be built:     core flann imgproc ml photo video imgcodecs shape videoio highgui objdetect superres ts features2d calib3d stitching videostab 
--  Disabled:     world 
--  Disabled by dependency:  - 
--  Unavailable:     cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python2 python3 viz 
-- 
-- GUI: 
--  QT:       NO 
--  GTK+ 2.x:     YES (ver 2.24.23) 
--  GThread :     YES (ver 2.40.2) 
--  GtkGlExt:     NO 
--  OpenGL support:    NO 
--  VTK support:     NO 
-- 
-- Media I/O: 
--  ZLib:      /home/newdisk/optnew/opencv-rely/lib/libz.so (ver 1.2.8) 
--  JPEG:      /home/newdisk/optnew/opencv-rely/lib/libjpeg.so (ver 90) 
--  WEBP:      build (ver 0.3.1) 
--  PNG:       /home/newdisk/optnew/opencv-rely/lib/libpng.so (ver 1.6.29) 
--  TIFF:      build (ver 42 - 4.0.2) 
--  JPEG 2000:     build (ver 1.900.1) 
--  OpenEXR:      build (ver 1.7.1) 
--  GDAL:      NO 
-- 
-- Video I/O: 
--  DC1394 1.x:     NO 
--  DC1394 2.x:     YES (ver 2.2.1) 
--  FFMPEG:      YES 
--  codec:      YES (ver 54.35.1) 
--  format:     YES (ver 54.20.4) 
--  util:      YES (ver 52.3.0) 
--  swscale:     YES (ver 2.1.1) 
--  resample:     NO 
--  gentoo-style:    YES 
--  GStreamer:     NO 
--  OpenNI:      NO 
--  OpenNI PrimeSensor Modules: NO 
--  OpenNI2:      NO 
--  PvAPI:      NO 
--  GigEVisionSDK:    NO 
--  UniCap:      NO 
--  UniCap ucil:     NO 
--  V4L/V4L2:     Using libv4l1 (ver 0.8.8)/libv4l2 (ver 0.8.8) 
--  XIMEA:      NO 
--  Xine:      NO 
--  gPhoto2:      NO 
-- 
-- Parallel framework:   pthreads 
-- 
-- Other third-party libraries: 
--  Use IPP:      NO 
--  Use VA:      NO 
--  Use Intel VA-API/OpenCL:  NO 
--  Use Eigen:     NO 
--  Use Cuda:     NO 
--  Use OpenCL:     YES 
--  Use custom HAL:    NO 
-- 
-- OpenCL: 
--  Version:      dynamic 
--  Include path:    /home/newdisk/opencv-3.1.0/3rdparty/include/opencl/1.2 
--  Use AMDFFT:     NO 
--  Use AMDBLAS:     NO 
-- 
-- Python 2: 
--  Interpreter:     /usr/bin/python2.7 (ver 2.7.6) 
-- 
-- Python 3: 
--  Interpreter:     /usr/bin/python3.4 (ver 3.4.3) 
-- 
-- Python (for build):   /usr/bin/python2.7 
-- 
-- Java: 
--  ant:       NO 
--  JNI:       NO 
--  Java wrappers:    NO 
--  Java tests:     NO 
-- 
-- Matlab:      Matlab not found or implicitly disabled 
-- 
-- Documentation: 
--  Doxygen:      NO 
--  PlantUML:     NO 
-- 
-- Tests and samples: 
--  Tests:      YES 
--  Performance tests:   YES 
--  C/C++ Examples:    NO 
-- 
-- Install path:     /home/newdisk/opencv-3.1.0/BuildOpencv/install 
-- 
-- cvconfig.h is in:    /home/newdisk/opencv-3.1.0/BuildOpencv 
-- ----------------------------------------------------------------- 
-- 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/newdisk/opencv-3.1.0/BuildOpencv 

配置和生成后,运行cmake的贵:

[email protected]:/home/newdisk/opencv-3.1.0/BuildOpencv$ sudo cmake-gui 

Src:/home/newdisk/opencv-3.1.0 
Build:/home/newdisk/opencv-3.1.0/BuildOpencv 

CMAKE_INSTALL_PREFIX:/home/newdisk/optnew/opencv-arm 

Don't choose these items: 
WITH_CUDA 
WITH_GTK 
WITH_1394 
WITH_GSTREAMER 
WITH_LIBV4L 
WITH_TIFF 
BUILD_OPENEXR 
WITH_OPENEXR 
WITH_OPENCL 

Configure and generate. 

[email protected]:/home/newdisk/opencv-3.1.0/BuildOpencv$ sudo vi CMakeCache.txt 
#CMakeCache.txt 
//Flags used by the linker. 
CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt 

[email protected]:/home/newdisk/opencv-3.1.0/BuildOpencv$ sudo make 

Fianlly,我得到了这些错误:

[ 27%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_mjpeg_decoder.cpp.o 
[ 27%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_v4l.cpp.o 
[ 27%] Building CXX object modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o 
In file included from /home/newdisk/opencv-3.1.0/modules/videoio/src/cap_ffmpeg_impl.hpp:65:0, 
      from /home/newdisk/opencv-3.1.0/modules/videoio/src/cap_ffmpeg.cpp:45: 
/home/newdisk/opencv-3.1.0/modules/videoio/src/ffmpeg_codecs.hpp:77:36: fatal error: libavformat/avformat.h: No such file or directory 
compilation terminated. 
make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o] Error 1 
make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2 
make: *** [all] Error 2 

虽然文件了libavformat/avformat.h做出口在我的目录 的/ home/newdisk/optnew/OpenCV的-依靠/包括

为什么CMake的找到LIB目录

-- Found ZLIB: /home/newdisk/optnew/opencv-rely/lib/libz.so (found suitable version "1.2.8", minimum required is "1.2.3") 

但找不到include目录?

/home/newdisk/optnew/opencv-rely/include 

你有什么想法吗?

回答

0

我已经通过添加额外的两行解决了这个问题提交toolchain.cmake INCLUDE_DIRECTORIES(/home/newdisk/optnew/opencv-rely/include)LINK_DIRECTORIES(/home/newdisk/optnew/opencv-rely/lib)。真诚希望有人能更清楚地解释它