标签(空格分隔): 【Linux开发】
移植opencv到tq2440
一、下载opencv及cmake
1,download opencv_2.3.1
OpenCV-2.3.1a.tar.bz2
下载链接:http://opencv.org/downloads.html
2,download cmake
//cmake-3.1.0.tar.gz //without gui
cmake-3.1.0-Linux-i386.sh
下载链接:http://www.cmake.org/cmake/resources/software.html
二、将下载文件放入linux下
1,cmake
文件路径
/opt/EmbedSky/cmake/cmake-3.1.0
解压
[root@EmbedSky cmake-3.1.0]# tar -xzvf cmake-3.1.0.tar.gz -C ./
2,opencv
文件路径
where is the source code:
/opt/EmbedSky/opencv_2_3_1/OpenCV-2.3.1
where to build the binaries:
/opt/EmbedSky/opencv_2_3_1/opencv_forArm
#./cmake-3.1.0-Linux-i386.sh
#cd cmake-3.1.0-Linux-i386
#cd bin
#./cmake-gui
where is the source code:/opt/EmbedSky/opencv_2_3_1/OpenCV-2.3.1
where to build the binaries:/opt/EmbedSky/opencv_2_3_1/opencv_forArm
然后,点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next
Operating System填写arm-linux 或者 Linux 注意L是大写(我用的是这个,ok的)
C Compilers填写/opt/EmbedSky/4.3.3/bin/arm-linux-gcc
C++ Compilers填写/opt/EmbedSky/4.3.3/bin/arm-linux-g++
Target Root填写/opt/EmbedSky/4.3.3
点击finish
///////////////////////////////////////
err1:
System is unknown to cmake, create:
Platform/arm-linux to use this system, please send your config file to cmake@www.cmake.org so it can be added to cmake
Your CMakeCache.txt file was copied to CopyOfCMakeCache.txt. Please send that file to cmake@www.cmake.org.
Extracting svn version, please wait...
SVNVERSION: exported
Detected version of GNU GCC: 20091 (200901)
Could NOT find PythonLibs (missing: PYTHON_INCLUDE_DIRS)
Unknown option: -B
usage: /usr/bin/python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
Unknown option: -B
usage: /usr/bin/python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
CUDA_TOOLKIT_ROOT_DIR not found or specified
CMake Error at /opt/EmbedSky/cmake/cmake-3.1.0-Linux-i386/share/cmake-3.1/Modules/FindCUDA.cmake:616 (if):
if given arguments:
"CUDA_VERSION" "VERSION_GREATER" "5.0" "AND" "CMAKE_CROSSCOMPILING" "AND" "MATCHES" "arm" "AND" "EXISTS" "CUDA_TOOLKIT_ROOT_DIR-NOTFOUND/targets/armv7-linux-gnueabihf"
Unknown arguments specified
Call Stack (most recent call first):
CMakeLists.txt:958 (find_package)
Configuring incomplete, errors occurred!
See also "/opt/EmbedSky/opencv_2_3_1/opencv_forArm/CMakeFiles/CMakeOutput.log".
anwser:将 WITH_CUDA的钩去掉
//////////////////////////////////////////
err2:
CMake Warning (dev) at CMakeLists.txt:1508 (add_custom_target):
Policy CMP0037 is not set: Target names should not be reserved and should
match a validity pattern. Run "cmake --help-policy CMP0037" for policy
details. Use the cmake_policy command to set the policy and suppress this
warning.
The target name "package_source" is reserved or not valid for certain CMake
features, such as generator expressions, and may result in undefined
behavior.
This warning is for project developers. Use -Wno-dev to suppress it.
anwser2:WITH_TIFF去掉
////////////////////////////////////////
System is unknown to cmake, create:
Platform/arm-linux to use this system, please send your config file to cmake@www.cmake.org so it can be added to cmake
Your CMakeCache.txt file was copied to CopyOfCMakeCache.txt. Please send that file to cmake@www.cmake.org.
Extracting svn version, please wait...
SVNVERSION: exported
Detected version of GNU GCC: 20091 (200901)
Could NOT find PythonLibs (missing: PYTHON_INCLUDE_DIRS)
Unknown option: -B
usage: /usr/bin/python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
Unknown option: -B
usage: /usr/bin/python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
Parsing 'cvconfig.h.cmake'
CMake Warning (dev) at CMakeLists.txt:1508 (add_custom_target):
Policy CMP0037 is not set: Target names should not be reserved and should
match a validity pattern. Run "cmake --help-policy CMP0037" for policy
details. Use the cmake_policy command to set the policy and suppress this
warning.
The target name "package_source" is reserved or not valid for certain CMake
features, such as generator expressions, and may result in undefined
behavior.
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at OpenCVModule.cmake:158 (get_target_property):
Policy CMP0026 is not set: Disallow use of the LOCATION target property.
Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The LOCATION property should not be read from target "opencv_test_calib3d".
Use the target name directly with add_custom_command, or use the generator
expression $, as appropriate.
Call Stack (most recent call first):
modules/calib3d/CMakeLists.txt:1 (define_opencv_module)
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at OpenCVModule.cmake:158 (get_target_property):
Policy CMP0026 is not set: Disallow use of the LOCATION target property.
Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The LOCATION property should not be read from target "opencv_test_core".
Use the target name directly with add_custom_command, or use the generator
expression $, as appropriate.
Call Stack (most recent call first):
modules/core/CMakeLists.txt:8 (define_opencv_module)
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at OpenCVModule.cmake:158 (get_target_property):
Policy CMP0026 is not set: Disallow use of the LOCATION target property.
Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The LOCATION property should not be read from target
"opencv_test_features2d". Use the target name directly with
add_custom_command, or use the generator expression $, as
appropriate.
Call Stack (most recent call first):
modules/features2d/CMakeLists.txt:1 (define_opencv_module)
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at modules/highgui/CMakeLists.txt:418 (get_target_property):
Policy CMP0026 is not set: Disallow use of the LOCATION target property.
Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The LOCATION property should not be read from target "opencv_test_highgui".
Use the target name directly with add_custom_command, or use the generator
expression $, as appropriate.
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at modules/highgui/CMakeLists.txt:418 (get_target_property):
Policy CMP0022 is not set: INTERFACE_LINK_LIBRARIES defines the link
interface. Run "cmake --help-policy CMP0022" for policy details. Use the
cmake_policy command to set the policy and suppress this warning.
Target "opencv_highgui" has an INTERFACE_LINK_LIBRARIES property which
differs from its LINK_INTERFACE_LIBRARIES properties.
INTERFACE_LINK_LIBRARIES:
opencv_core;opencv_imgproc;zlib;libjpeg;libpng;libjasper
LINK_INTERFACE_LIBRARIES:
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at OpenCVModule.cmake:158 (get_target_property):
Policy CMP0026 is not set: Disallow use of the LOCATION target property.
Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The LOCATION property should not be read from target "opencv_test_imgproc".
Use the target name directly with add_custom_command, or use the generator
expression $, as appropriate.
Call Stack (most recent call first):
modules/imgproc/CMakeLists.txt:1 (define_opencv_module)
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at OpenCVModule.cmake:158 (get_target_property):
Policy CMP0026 is not set: Disallow use of the LOCATION target property.
Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The LOCATION property should not be read from target "opencv_test_ml". Use
the target name directly with add_custom_command, or use the generator
expression $, as appropriate.
Call Stack (most recent call first):
modules/ml/CMakeLists.txt:1 (define_opencv_module)
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at OpenCVModule.cmake:158 (get_target_property):
Policy CMP0026 is not set: Disallow use of the LOCATION target property.
Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The LOCATION property should not be read from target
"opencv_test_objdetect". Use the target name directly with
add_custom_command, or use the generator expression $, as
appropriate.
Call Stack (most recent call first):
modules/objdetect/CMakeLists.txt:1 (define_opencv_module)
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at OpenCVModule.cmake:158 (get_target_property):
Policy CMP0026 is not set: Disallow use of the LOCATION target property.
Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The LOCATION property should not be read from target "opencv_test_video".
Use the target name directly with add_custom_command, or use the generator
expression $, as appropriate.
Call Stack (most recent call first):
modules/video/CMakeLists.txt:1 (define_opencv_module)
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at modules/gpu/CMakeLists.txt:213 (get_target_property):
Policy CMP0026 is not set: Disallow use of the LOCATION target property.
Run "cmake --help-policy CMP0026" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The LOCATION property should not be read from target "opencv_test_gpu".
Use the target name directly with add_custom_command, or use the generator
expression $, as appropriate.
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at modules/gpu/CMakeLists.txt:88 (add_library):
Policy CMP0038 is not set: Targets may not link directly to themselves.
Run "cmake --help-policy CMP0038" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
Target "opencv_gpu" links to itself.
This warning is for project developers. Use -Wno-dev to suppress it.
General configuration for opencv 2.3.1 =====================================
Built as dynamic libs?: YES
Compiler: /opt/EmbedSky/4.3.3/bin/arm-linux-g++
C++ flags (Release): -Wall -ffunction-sections -O3 -DNDEBUG -fomit-frame-pointer -DNDEBUG
C++ flags (Debug): -Wall -ffunction-sections -g -O0 -DDEBUG -D_DEBUG -ggdb3
Linker flags (Release):
Linker flags (Debug):
GUI:
GTK+ 2.x: NO
GThread: NO
Media I/O:
ZLib: build
JPEG: build
PNG: build
TIFF:
JPEG 2000: build
OpenEXR: NO
OpenNI: NO
OpenNI PrimeSensor Modules: NO
XIMEA: NO
Other third-party libraries:
Use IPP: NO
Use TBB: NO
Use Cuda: NO
Use Eigen: NO
Interfaces:
Python: YES
Python interpreter: /usr/bin/python -B (ver 2.5)
Python numpy: NO (Python wrappers will not be generated)
Java: NO
Documentation:
Sphinx: NO
PdfLaTeX compiler: /usr/bin/pdflatex
Build Documentation: NO
Tests and samples:
Tests: YES
Examples: NO
Install path: /usr/local
cvconfig.h is in: /opt/EmbedSky/opencv_2_3_1/opencv_forArm
-----------------------------------------------------------------
Configuring done
有些警告忽略了
#make
/usr/lib/libImath.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[2]: *** [lib/libopencv_highgui.so] 错误 1
make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] 错误 2
make: *** [all] 错误 2
answer:
remove BUILD_OPENEXR options
#make
....
[100%] Building CXX object modules/stitching/CMakeFiles/opencv_stitching.dir/main.o
Linking CXX executable ../../bin/opencv_stitching
[100%] Built target opencv_stitching
参考:
http://blog.sina.com.cn/s/blog_92942dba0101d1wj.html
http://blog.csdn.net/embeddedman/article/details/7416934
http://blog.csdn.net/chenaini119/article/details/39079965
http://blog.csdn.net/eagelangel/article/details/7232364
http://lbn321.blog.163.com/blog/static/227841017201422491245680/
http://blog.csdn.net/b5w2p0/article/details/39211013
////////////////////////////////////////////////////////////////////////////
小的总结
以上是用CMAKE编译OPENCV2.3.1,需要主要几个问题:
1,下载cmake和opencv,解压到linux下,这步很简单不会有什么问题
2,怎么去config cmake,最关键的
参考:http://blog.csdn.net/luotuo44/article/details/8958990
3,修改CMakeCache.txt 添加-lpthread -ldl -lrt
//Flags used by the linker.
CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt -ldl
4,make && make install
5,测试应用程序
6,移植到arm
我认为如果没有必要用更高opencv的话,比如opencv2.3.1
就用opencv2.0.0
为什么推荐opencv2.0呢,很简单,
1,没有cmake,直接config...就可以了;
2,节约时间;
3,最头痛的是 遇到一大推BUG,比如出现找不到链接库,最老火的是,那库就在那儿,它还说找不到,
哈哈,如果懂修改工具链会得到解决,我遇到这个问题,网上也有人遇到这个问题
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld:
warning: ../../lib/libopencv_imgproc.so, needed by
/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/lib/libopencv_highgui.so,
not found (try using -rpath or -rpath-link)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld:
warning: ../../lib/libopencv_core.so, needed by
/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/lib/libopencv_highgui.so,
not found (try using -rpath or -rpath-link)
下面介绍一下移植opencv2.0.0
1,下载及解压
2,生成opencv编译后的目录,方便管理