gpt4 book ai didi

c++ - ndk-build 给我 "error: undefined reference"到 cv::CascadeClassifier::load(std::string const&) 即使在我链接库之后

转载 作者:太空宇宙 更新时间:2023-11-03 22:40:27 24 4
gpt4 key购买 nike

我在使用 C++ 的 Android native 程序中使用 openCV。

我的 ndk-build 版本是 14,我使用的是 Android Studio 3.3 RC3 和 OpenCV 4.0。

当我尝试为相机添加一个简单的人脸检测程序并尝试使用 ndk-build 构建它时,它给了我以下错误:

error: undefined reference to 'cv::CascadeClassifier::load(std::string const&)'

这是我的一些代码:

void *frameRetriever(void *p){
...

const std::string face_cascade_name = "/data/local/tmp/haarcascade_frontalface_alt.xml";
cv::CascadeClassifier face_cascade;
face_cascade.load(face_cascade_name);
...
}


我试过用

cv::CascadeClassifier face_cascade = cv::CascadeClassifier(face_cascade_name)

代替加载函数,甚至尝试

void loadCascade(std::string filepath){

cv::CascadeClassifier face_cascade;
if ( !face_cascade.load(filepath) ){
LOGE("--Error Loading face cascade\n");
}

}

这些仍然给了我对 ndk-build 错误的 undefined reference 。(face_cascade_name中的文件对所有用户都是rwx)

我已经链接了我的 Android.mk 中的所有库文件:

...

LOCAL_LDLIBS += -L$(OPENCV_ANDROID_SDK)/libs/armeabi-v7a/
LOCAL_LDLIBS += -lopencv_core
LOCAL_LDLIBS += -lopencv_calib3d
LOCAL_LDLIBS += -lopencv_imgproc
LOCAL_LDLIBS += -lopencv_objdetect
LOCAL_LDLIBS += -lopencv_features2d
LOCAL_LDLIBS += -lopencv_flann
LOCAL_LDLIBS += -lopencv_stitching
LOCAL_LDLIBS += -lopencv_video
LOCAL_LDLIBS += -lopencv_dnn
LOCAL_LDLIBS += -lopencv_highgui
LOCAL_LDLIBS += -lopencv_imgcodecs
LOCAL_LDLIBS += -lopencv_ml
LOCAL_LDLIBS += -lopencv_photo
LOCAL_LDLIBS += -lopencv_videoio

...

我确实拥有所有这些 OpenCV 库作为 .so <myProject>/app/src/main/libs/armeabi-v7a/ 下的文件

至于构建 OpenCV 库,我使用以下 bash 脚本:

#!/bin/bash

if [ ! -d "./android_build/" ]; then
mkdir android_build
fi
if [ ! -d "./build/" ]; then
mkdir build
fi

rm -rf android_build/out/

cd build

cmake .. \
-DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake \
-DCMAKE_BUILD=Release \
-DBUILD_DOCS=OFF \
-DBUILD_JAVA=OFF \
-DBUILD_ANDROID_EXAMPLES=OFF \
-DBUILD_ANDROID_PROJECTS=OFF \
-DBUILD_SHARED_LIBS=ON \
-DANDROID_NDK=${ANDROID_NDK} \
-DANDROID_NATIVE_API_LEVEL=android-19 \
-DANDROID_SDK_TARGET=19 \
-DANDROID_ABI="armeabi-v7a with NEON" \
-DANDROID_TOOLCHAIN=clang \
-DANDROID_STL=c++_shared \
-DCV_TRACE=OFF \
-DWITH_IPP=OFF \
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
-DBUILD_opencv_core=ON \
-DBUILD_opencv_imgproc=ON \
-DBUILD_opencv_calib3d=ON \
-DBUILD_opencv_imgcodecs=ON \
-DBUILD_opencv_dnn=ON \
-DBUILD_opencv_flann=ON \
-DBUILD_opencv_ml=ON \
-DBUILD_opencv_objdetect=ON \
-DBUILD_opencv_photo=ON \
-DBUILD_opencv_stiching=ON \
-DBUILD_opencv_videoio=ON \
-DBUILD_opencv_highgui=ON \
-DCMAKE_INSTALL_PREFIX:PATH=$(pwd)/../android_build/out \
-DWITH_CUDA=OFF \
-DWITH_TBB=OFF \
-DHAVE_OPENCL=ON \
-DOPENCL_FOUND=ON \
-DWITH_OPENCL=ON \
-DHAVE_OPENCL_STATIC=ON \
-DOPENCL_LIBRARY=$(pwd)/../libopencl-stub/libOpenCL.so \
-DOPENCL_INCLUDE_DIRS=$(pwd)/../libopencl-stub/include \

cmake -LA
make -j4
make install

在测试了一些东西之后,我注意到在其参数中有“const String &”的其他 OpenCV 函数在 ndk-build 上给我同样的错误。 (其他 OpenCV 函数,如 cvtColor 完美运行)。

如有任何帮助,我们将不胜感激。

最佳答案

显然,更改 makefile 中的某些值可以解决问题。

在 Application.mk 中,改变 APP_STL := gnuSTL_shared 到 c++_shared 并注释掉 NDK_TOOLCHAIN_VERSION。在 Android.mk 中,注释掉一些 LOCAL_CPPFLAG。

构建它并解决了问题。

关于c++ - ndk-build 给我 "error: undefined reference"到 cv::CascadeClassifier::load(std::string const&) 即使在我链接库之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54432541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com