android - 为 Android 构建 OpenCV 4.0:不能包含?
问题描述
我正在尝试从Android库的源代码构建 OpenCV。但是,会出现以下错误:
[ 18%] Building C object 3rdparty/libtiff/CMakeFiles/libtiff.dir/tif_unix.c.o
/mnt/d/OpenCVBuild/src/3rdparty/libtiff/tif_stream.cxx:29:20: fatal error: iostream: No such file or directory
#include <iostream>
(顺便说一句,每当它试图包含 iostream 时,似乎都会发生这种错误,我只是粘贴一个典型的错误,因为每个人都是一样的。)
我的构建命令:
/mnt/d/OpenCVBuild/cmake-3.15.1-Linux-x86_64/bin/cmake \
-DCMAKE_TOOLCHAIN_FILE=../src/platforms/android/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a \
-DANDROID_STL=c++_shared \
-DCMAKE_ANDROID_STL_TYPE=c++_shared \
-DANDROID_NATIVE_API_LEVEL=27 \
-DANDROID_SDK=/mnt/d/OpenCVBuild/android-sdk \
-DANDROID_NDK=/mnt/d/OpenCVBuild/android-ndk-r16b-linux-x86_64 \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_FAT_JAVA_LIB=OFF \
-DBUILD_PROTOBUF=OFF \
-DWITH_CUDA=OFF -DWITH_MATLAB=OFF -DBUILD_ANDROID_PROJECTS=OFF -DBUILD_ANDROID_EXAMPLES=OFF -DBUILD_DOCS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF \
../src \
&& make -j4
感谢您的任何建议!
编辑:编译-j1
[ 13%] Building CXX object 3rdparty/libtiff/CMakeFiles/libtiff.dir/tif_stream.cxx.o
/mnt/d/OpenCVBuild/src/3rdparty/libtiff/tif_stream.cxx:29:20: fatal error: iostream: No such file or directory
#include <iostream>
^
compilation terminated.
3rdparty/libtiff/CMakeFiles/libtiff.dir/build.make:582: recipe for target '3rdparty/libtiff/CMakeFiles/libtiff.dir/tif_stream.cxx.o' failed
make[2]: *** [3rdparty/libtiff/CMakeFiles/libtiff.dir/tif_stream.cxx.o] Error 1
CMakeFiles/Makefile2:293: recipe for target '3rdparty/libtiff/CMakeFiles/libtiff.dir/all' failed
make[1]: *** [3rdparty/libtiff/CMakeFiles/libtiff.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2
关于 iostream 在哪里:在 locationd:\OpenCVBuild\android-ndk-r16b-linux-x86_64\sources\cxx-stl\llvm-libc++\include\
中,有很多文件,包括iostream
(但是没有任何扩展名,not iostream.h
)。
顺便说一下,这是cmake的一些信息:
-- CPU/HW features:
-- Baseline: NEON
-- requested: NEON FP16
--
-- C/C++:
-- Built as dynamic libs?: YES
-- C++ Compiler: /mnt/d/OpenCVBuild/android-ndk-r16b-linux-x86_64/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-g++ (ver 4.9.0)
-- C++ flags (Release): -fexceptions -frtti -Wno-psabi --sysroot=/mnt/d/OpenCVBuild/android-ndk-r16b-linux-x86_64/platforms/android-27/arch-arm64 -funwind-tables -fsigned-char -no-canonical-prefixes -fdata-sections -ffunction-sections -Wa,--noexecstack -DANDROID -D__ANDROID_API__=27 -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wsign-promo -Wuninitialized -Winit-self -Wno-delete-non-virtual-dtor -Wno-comment -Wno-missing-field-initializers -fdiagnostics-show-option -fomit-frame-pointer -ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300 -O3 -DNDEBUG -DNDEBUG
-- C++ flags (Debug): -fexceptions -frtti -Wno-psabi --sysroot=/mnt/d/OpenCVBuild/android-ndk-r16b-linux-x86_64/platforms/android-27/arch-arm64 -funwind-tables -fsigned-char -no-canonical-prefixes -fdata-sections -ffunction-sections -Wa,--noexecstack -DANDROID -D__ANDROID_API__=27 -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wsign-promo -Wuninitialized -Winit-self -Wno-delete-non-virtual-dtor -Wno-comment -Wno-missing-field-initializers -fdiagnostics-show-option -fomit-frame-pointer -ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden -fno-omit-frame-pointer -fno-strict-aliasing -O0 -g -DDEBUG -D_DEBUG -DDEBUG -D_DEBUG
-- C Compiler: /mnt/d/OpenCVBuild/android-ndk-r16b-linux-x86_64/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc
-- C flags (Release): -fexceptions -Wno-psabi --sysroot=/mnt/d/OpenCVBuild/android-ndk-r16b-linux-x86_64/platforms/android-27/arch-arm64 -funwind-tables -fsigned-char -no-canonical-prefixes -fdata-sections -ffunction-sections -Wa,--noexecstack -DANDROID -D__ANDROID_API__=27 -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wuninitialized -Winit-self -Wno-comment -Wno-missing-field-initializers -fdiagnostics-show-option -fomit-frame-pointer -ffunction-sections -fdata-sections -fvisibility=hidden -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300 -O3 -DNDEBUG -DNDEBUG
-- C flags (Debug): -fexceptions -Wno-psabi --sysroot=/mnt/d/OpenCVBuild/android-ndk-r16b-linux-x86_64/platforms/android-27/arch-arm64 -funwind-tables -fsigned-char -no-canonical-prefixes -fdata-sections -ffunction-sections -Wa,--noexecstack -DANDROID -D__ANDROID_API__=27 -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wuninitialized -Winit-self -Wno-comment -Wno-missing-field-initializers -fdiagnostics-show-option -fomit-frame-pointer -ffunction-sections -fdata-sections -fvisibility=hidden -fno-omit-frame-pointer -fno-strict-aliasing -O0 -g -DDEBUG -D_DEBUG -DDEBUG -D_DEBUG
-- Linker flags (Release): -Wl,--no-undefined -Wl,-allow-shlib-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--gc-sections
-- Linker flags (Debug): -Wl,--no-undefined -Wl,-allow-shlib-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--gc-sections
-- ccache: NO
-- Precompiled headers: NO
-- Extra dependencies: dl m log
EDIT2:我尝试使用gnustl
,即
-DANDROID_STL=gnustl_static \
-DCMAKE_ANDROID_STL_TYPE=gnustl_static \
但有错误:
[ 69%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/utils/logtagmanager.cpp.o
/mnt/d/OpenCVBuild/src/modules/core/src/utils/logtagconfigparser.cpp: In static member function 'static std::string cv::utils::logging::LogTagConfigParser::toString(cv::utils::logging::LogLevel)':
/mnt/d/OpenCVBuild/src/modules/core/src/utils/logtagconfigparser.cpp:301:16: error: 'to_string' is not a member of 'std'
return std::to_string((int)level);
^
/mnt/d/OpenCVBuild/src/modules/core/src/utils/logtagconfigparser.cpp:303:1: error: control reaches end of non-void function [-Werror=return-type]
}
解决方案
include <iostream>
仅在 C++ 语言中可用,而不是 C。这些是不同的语言(即使它们非常相似)。
您的代码被保存到 C 文件中
[ 18%] Building C object 3rdparty/libtiff/CMakeFiles/libtiff.dir/tif_unix.c.o
/mnt/d/OpenCVBuild/src/3rdparty/libtiff/tif_stream.cxx:29:20: fatal error:
iostream: No such file or directory
#include <iostream>
您是否将 C++ 文件包含到 C 文件中?请重新运行代码make -j1
以获得正确的错误(消息不会在编译线程之间交错)。
推荐阅读
- html - 如何使用 Angular 7 表单在单独的行或区域上显示字段
- .net - ASP.Net Core Web API MVC
- python - 连接丢失后如何销毁异步服务器上的协议实例?
- spring - org.springframework.cloud.gateway.config.GatewayAutoConfiguration 方法 websocketRoutingFilter 的参数 0 需要一个 bean 类型
- php - 带有数据表的 PHP MVC(手动)
- javascript - 我们可以获取 javascript 类的属性吗?
- powerbi - DAX 中的 CountIf 公式
- node.js - nodeJS - 如何从联邦快递获取“ESTIMATED_DELIVERY”?
- c# - 如何从我的函数访问数据以在另一个函数中使用?
- c++ - C++ char 数组赋值