Opencv 如何使用libc++;STL库?

Opencv 如何使用libc++;STL库?,opencv,stl,android-ndk,libc++,Opencv,Stl,Android Ndk,Libc++,我想使用libc++STL库,而不是默认的gnustl,从源代码构建OpenCV。LibC++提供了更好的C++11和C++14支持。有可能做到这一点吗?我已经用OpenCV 2.4.7和Android NDK r10d对此进行了测试 首先,你需要下载。解压缩源代码并将platforms/android/android.toolchain.cmake替换为 现在,打开modules/core/include/opencv2/core/operations.hpp并将第69行从 (defined

我想使用libc++STL库,而不是默认的gnustl,从源代码构建OpenCV。LibC++提供了更好的C++11和C++14支持。有可能做到这一点吗?

我已经用OpenCV 2.4.7和Android NDK r10d对此进行了测试

首先,你需要下载。解压缩源代码并将platforms/android/android.toolchain.cmake替换为

现在,打开
modules/core/include/opencv2/core/operations.hpp
并将第69行从

(defined __GNUC__ && defined _STLPORT_MAJOR)

接下来,在文件夹platforms/scripts中创建一个脚本cmake_android_arm_libcxx.sh,包含以下内容:

#!/bin/sh
cd `dirname $0`/..

mkdir -p build_android_arm
cd build_android_arm

cmake -DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.8 -DANDROID_STL=c++_static -DANDROID_NATIVE_API_LEVEL=android-8 -DBUILD_ANDROID_EXAMPLES=OFF -DBUILD_DOCS=OFF -DBUILD_FAT_JAVA_LIB=OFF -DBUILD_JASPER=OFF -DBUILD_OPENEXR=OFF -DBUILD_PACKAGE=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_TIFF=OFF -DBUILD_WITH_DEBUG_INFO=OFF -DBUILD_opencv_androidcamera=OFF -DBUILD_opencv_contrib=OFF -DBUILD_opencv_java=OFF -DBUILD_opencv_legacy=OFF -DBUILD_opencv_ml=OFF -DBUILD_opencv_nonfree=OFF -DBUILD_opencv_objdetect=OFF -DBUILD_opencv_photo=OFF -DBUILD_opencv_stitching=OFF -DBUILD_opencv_ts=OFF -DBUILD_opencv_video=OFF -DBUILD_opencv_videostab=OFF -DCMAKE_C_FLAGS_RELEASE="-Os -DNDEBUG -fvisibility=hidden -ffunction-sections -fstack-protector-all" -DCMAKE_CXX_FLAGS_RELEASE="-Os -DNDEBUG -fvisibility=hidden -ffunction-sections -fstack-protector-all -fvisibility-inlines-hidden" -DENABLE_PRECOMPILED_HEADERS=OFF -DWITH_EIGEN=OFF -DWITH_JASPER=OFF -DWITH_OPENEXR=OFF -DWITH_TIFF=OFF -DWITH_TBB=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=../android/android.toolchain.cmake $@ ../..
如果需要,可以调整脚本的参数(即,构建什么以及如何构建)

最后,将路径导出到NDK构建文件夹

export ANDROID_NDK=~/android-sdks/android-ndk-r10d/
并执行脚本:

 sh ./scripts/cmake_android_arm_libcxx.sh 
现在进入
build\u android\u arm
文件夹并构建OpenCV:

cd build_android_arm
make -j9
libjpeg、libpng和其他第三方库将出现在
platforms/build\u android\u arm/3rdparty/lib
中,opencv库将出现在
platforms/build\u android\u arm/lib
文件夹中


这已经在Mac OS X 10.10、OpenCV 2.4.7和Android NDK r10d上进行了测试。

以下是我使用clang和libc++为arm64构建OpenCV 3.0的脚本(对于其他ABI刚刚更改的工具链名称):


您是否已将项目更新为OpenCV 3?这条线已经不存在了。现在还没有,但计划下周或下周后有一条。原因是最近发布的NDK r11不推荐GCC和stdc++而支持Clang和libc++。@joseurbanoduarteteniunior,我使用Clang和libc++构建了OpenCV 3.0,没有对代码进行任何修改。我只是开箱即用(无需修改
操作.hpp
。我忘了说你需要使用NDK r10e,因为r11中的文件夹结构已经改变,所以android cmake工具链不再工作。但是,有一个。你为MIPS编译了吗?你能发布你是如何做到的吗?你从哪里得到AARC64-linux-android-clang3.5的?如果你构建了它,那么你能轻松发布构建步骤?IIRC,它是与NDK发行版中现有的clang二进制文件的符号链接-只是为了欺骗OpenCV工具链,使其认为有一个新版本的clang。但由于NDK提供了自己的官方cmake工具链,我将其用于构建OpenCV。
cd build_android_arm
make -j9
#!/bin/sh

export ANDROID_NDK=~/android-sdks/android-ndk
cmake -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang3.5 -DANDROID_STL=c++_static -DANDROID_ABI="arm64-v8a" -DANDROID_NATIVE_API_LEVEL=android-8 -DBUILD_ANDROID_EXAMPLES=OFF -DBUILD_DOCS=OFF -DBUILD_FAT_JAVA_LIB=OFF -DBUILD_JASPER=OFF -DBUILD_OPENEXR=OFF -DBUILD_PACKAGE=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_TIFF=ON -DBUILD_WITH_DEBUG_INFO=OFF -DBUILD_opencv_apps=OFF -DBUILD_opencv_java=OFF -DBUILD_opencv_python2=OFF -DBUILD_opencv_world=OFF -DCMAKE_C_FLAGS_RELEASE="-Os -DNDEBUG -fvisibility=hidden -ffunction-sections -fstack-protector-all" -DCMAKE_CXX_FLAGS_RELEASE="-Os -DNDEBUG -fvisibility=hidden -ffunction-sections -fstack-protector-all -fvisibility-inlines-hidden" -DENABLE_PRECOMPILED_HEADERS=OFF -DWITH_EIGEN=OFF -DWITH_JASPER=OFF -DWITH_OPENEXR=OFF -DWITH_TIFF=ON -DWITH_TBB=ON -DWITH_CUDA=OFF -DWITH_CUFFT=OFF -DWITH_WEBP=OFF -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=$1/platforms/android/android.toolchain.cmake $1