Building Opencv4.3 Android共享库错误

问题描述 投票:0回答:1

我正在尝试编译Opencv4.3以与Android进行交叉编译,但是如果我使用“ DBUILD_SHARED_LIBS = ON”,则在运行make命令时出现错误。

命令:

~/Android/Sdk/cmake/3.6.4111459/bin/cmake .. -DANDROID_ABI=arm64-v8a -DANDROID_NATIVE_API_LEVEL=23 -DANDROID_ARM_NEON=ON -DANDROID_TOOLCHAIN=clang -DCMAKE_TOOLCHAIN_FILE=/home/<UserName>/Android/Sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_NDK=/home/<UserName>/Android/Sdk/ndk-bundle -DANDROID_SDK=/home/<UserName>/Android/Sdk -DCMAKE_BUILD_TYPE=Release -DBUILD_ANDROID_PROJECTS=OFF -DWITH_OPENCL=ON -DWITH_TBB=ON -DENABLE_NEON=ON -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DOPENCV_EXTRA_MODULES_PATH=/home/<UserName>/Transferências/Opencv4.3/opencv_contrib-4.3.0/modules -DINSTALL_ANDROID_EXAMPLES=OFF -DANDROID_EXAMPLES_WITH_LIBS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_DOCS=OFF -DWITH_IPP=ON -DANDROID_STL=c++_shared -DBUILD_SHARED_LIBS=ON -DBUILD_ANDROID_EXAMPLES=OFF -DANDROID_SDK_TARGET=21 -DBUILD_ZLIB=ON

错误:

[ 57%] Built target opencv_xphoto
[ 57%] Linking CXX shared library ../../lib/arm64-v8a/libopencv_dnn.so
../../3rdparty/lib/arm64-v8a/liblibprotobuf.a(common.cc.o): In function `google::protobuf::internal::DefaultLogHandler(google::protobuf::LogLevel, char const*, int, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&)':
/home/filipe/Transferências/Opencv4.3/opencv-4.3.0/3rdparty/protobuf/src/google/protobuf/stubs/common.cc:142: undefined reference to `__android_log_write'
/home/filipe/Transferências/Opencv4.3/opencv-4.3.0/3rdparty/protobuf/src/google/protobuf/stubs/common.cc:150: undefined reference to `__android_log_write'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
modules/dnn/CMakeFiles/opencv_dnn.dir/build.make:2701: recipe for target 'lib/arm64-v8a/libopencv_dnn.so' failed
make[2]: *** [lib/arm64-v8a/libopencv_dnn.so] Error 1
CMakeFiles/Makefile2:3591: recipe for target 'modules/dnn/CMakeFiles/opencv_dnn.dir/all' failed
make[1]: *** [modules/dnn/CMakeFiles/opencv_dnn.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

如果我使用DBUILD_SHARED_LIBS = OFF,则编译正常。我能做什么?有什么想法吗?

谢谢

android linux opencv ubuntu opencv4android
1个回答
0
投票

尝试向CMake命令添加“-D ENABLE_PRECOMPILED_HEADERS = OFF”选项,以通过“ #include_next”处理解决此GCC错误。

在OpenCV中,默认情况下不使用带有其他编译器标志(c ++ 11)的不支持的系统protobuf安装)。尝试使用以下CMake选项运行:-DBUILD_LIBPROTOBUF_FROM_SOURCES = ON或仅禁用dnn模块(-DBUILD_opencv_dnn = OFF)。

© www.soinside.com 2019 - 2024. All rights reserved.