作者:Sam (甄峰) sam_code@hotmail.com
#!/bin/sh
cd `dirname $0`/..
mkdir -p build_linux_i686
cd build_linux_i686
cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DBUILD_EXAMPLES=1 -DCMAKE_TOOLCHAIN_FILE=../linux/gnu.toolchain.cmake $@ ../..
这几天需要编译Linux下几个特定版本(2.4.13)的OpenCV库。OpenCV各版本库已经编译多次,本想这是非常容易的事情了,可没想到竟然遇到一些问题。先把最后找到的经典方法记录如下:
0. Download OpenCV:
先使用:git clone https://github.com/opencv/opencv.git
#git branch -a
master
remotes/origin/2.4
remotes/origin/master
当前的分支是master.
#git describe
3.3.0-56-g89172c0
是3.3版本。但Sam需要2.4.xx版本。
切换:
#git checkout 2.4
#git describe
2.4.13-4-gf7d99f3
好,这个版本可以用了。
1. 编译:
先进入编译脚本目录:
cd platforms/scripts/
但里面没有i686版本脚本。所以Sam干脆增加一个脚本。仿照其它编译脚本。
cmake_linux_i686.sh
#!/bin/sh
cd `dirname $0`/..
mkdir -p build_linux_i686
cd build_linux_i686
cmake -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DBUILD_EXAMPLES=1 -DCMAKE_TOOLCHAIN_FILE=../linux/gnu.toolchain.cmake $@ ../..
$cd platforms
$sh scripts/cmake_linux_i686.sh
$cd build_linux_i686
$make
编译完成。
下面再说说遇到的问题。
3. 第一次尝试中遇到的问题及解决方法:
3.1: 下载:
http://www.opencv.org/releases.html
下载了opencv-2.4.13-3.zip
同样在platforms/scripts/ 下建立了cmake_linux_i686.sh
$cd platforms
$sh scripts/cmake_linux_i686.sh
CMake Warning at cmake/OpenCVPackaging.cmake:23
(message):
CPACK_PACKAGE_VERSION does not match version provided by version.hpp
header!
Call Stack (most recent call first):
CMakeLists.txt:1106 (include)
分析:
CPACK_PACKAGE_VERSION does not match version provided by version.hpp
header!
Call Stack (most recent call first):
CMakeLists.txt:1106 (include)
分析:
查看cmake/OpenCVPackaging.cmake 23行内容:
if (NOT "${OPENCV_VCSVERSION}" MATCHES
"^${OPENCV_VERSION}.*")
message(WARNING "CPACK_PACKAGE_VERSION does not match version provided by version.hpp header!")
endif()
message(WARNING "CPACK_PACKAGE_VERSION does not match version provided by version.hpp header!")
endif()
OPENCV_VCSVERSION是哪里来的呢? 查到是在CMakeLists.txt中。
if(GIT_EXECUTABLE)
execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --always --dirty --match "2.[0-9].[0-9]*"
WORKING_DIRECTORY "${OpenCV_SOURCE_DIR}"
OUTPUT_VARIABLE OPENCV_VCSVERSION
RESULT_VARIABLE GIT_RESULT
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_RESULT EQUAL 0)
set(OPENCV_VCSVERSION "unknown")
endif()
else()
# We don't have git:
set(OPENCV_VCSVERSION "unknown")
endif()
这段脚本告诉要使用git describe 得到版本。可想而知,OpenCV这次是zip形式download的。肯定没有.git文件。 所以OPENCV_VCSVERSION没有信息。
execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --always --dirty --match "2.[0-9].[0-9]*"
WORKING_DIRECTORY "${OpenCV_SOURCE_DIR}"
OUTPUT_VARIABLE OPENCV_VCSVERSION
RESULT_VARIABLE GIT_RESULT
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_RESULT EQUAL 0)
set(OPENCV_VCSVERSION "unknown")
endif()
else()
# We don't have git:
set(OPENCV_VCSVERSION "unknown")
endif()
这段脚本告诉要使用git describe 得到版本。可想而知,OpenCV这次是zip形式download的。肯定没有.git文件。 所以OPENCV_VCSVERSION没有信息。
所以Sam在这里加上:
set(OPENCV_VCSVERSION "2.4.13")
就可以正常了。
就可以正常了。
但实际做完发现,其实就是个Warring,不用理都没事。呵呵。