自动交叉编译和链接静态OpenCV库

时间:2018-04-17 14:48:57

标签: xcode windows opencv cmake g++

我在ubuntu上使用以下内容构建了OpenCV:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D BUILD_SHARED_LIBS=OFF \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=OFF \
    -D INSTALL_PYTHON_EXAMPLES=OFF \
    -D INSTALL_C_EXAMPLES=OFF \
    -D BUILD_JAVA=OFF \
    -D BUILD_TESTS=OFF \
    -D BUILD_ZLIB=ON \
    -D BUILD_TIFF=ON \
    -D BUILD_JASPER=ON \
    -D BUILD_JPEG=ON \
    -D BUILD_PNG=ON \
    -D BUILD_OPENEXR=ON \
    -D BUILD_WEBP=ON \
    -D BUILD_EXAMPLES=OFF ..

天真地假设cmake会自动处理我的测试程序的链接计划。但是,为了使我的自动移植脚本能够工作,我被迫尝试直接从cmake输出恢复库构建变量,以重建我需要的共享和静态依赖项。

externalLibs=$(/bin/opencv_version -v | grep ' Extra dependencies:' | cut -d':' -f2 | sed -r 's/( )+/ -l/g')
staticLibs=$(cat OpenCVModules.cmake | grep 'IMPORTED_LOCATION_RELEASE' | sed -r 's/IMPORTED_LOCATION_RELEASE//g' | sed -rz 's/[" \r\n]+/ /g' )
headers=$(cat OpenCVConfig.cmake | grep 'set(OpenCV_INCLUDE_DIRS ' | sed -r 's/set\(OpenCV_INCLUDE_DIRS//g'  | sed -r 's/( ")+/ -I/g' | sed -r 's/["\)]+//g' )

我遇到过的问题(缺少引用的屏幕,例如"对`cv :: softdouble :: operator /&#34的未定义引用;)似乎过时了: Undefined references in static OpenCV libraries Undefined references in static OpenCV libraries 其他人使用的解决方案似乎特定于用例: https://forum.qt.io/topic/51543/solved-cannot-link-libs-statically Why does the order in which libraries are linked sometimes cause errors in GCC?

是否有更好的方法可以在cmake中针对特定的一组静态opencv库导入和构建程序,而无需安装特定于体系结构的构建版本来处理cmake魔术?

或者人们实际上手动静态链接20个奇怪的库; - )

ar cr libopencv_core.a myappobj.o

任何见解都会受到赞赏,因为cmake文件变得越来越复杂,因为我还打算将wxWidgets静态链接到同一个程序中。通过在opencv测试应用程序的构建树中对自动生成的cmake link.txt文件进行逆向工程,我取得了一些进展。但是,必须有一种更好的方法来做到这一点,而不必恢复到并不总是跨平台友好的共享库...; - )

0 个答案:

没有答案