我试图构建一个基于两个开源库的项目。我使用的库是OpenCV和ceres。libopencv_java3.so是来自github网站的OpenCV3.1.2版本,其中包含OpenCV3.1.0AndroidSDK。libceres.so是根据自己编写的源代码编译的。
当我构建应用程序时,NDK生成以下信息:
clang++.exe:警告:编译期间未使用的参数:'-nostdlib++‘-line命令行-参数
错误:对'cv::imwrite(cv::String const&,cv::_InputArray const&,std::__ndk1::vector > const&)‘的未定义引用
在谷歌搜索之后,我找到了一个相关的帖子
Error Undefined reference to 'std::__ndk1::locale::~locale()'答案是使用不同的STL实现。
就我的情况而言,libopencv_java.so可能使用gnustl_static,而libceres则使用c++_static。我不明白原因。这两个实现都是静态库,不应该发生冲突。
gnustl_static?
发布于 2020-11-04 13:12:49
这个答案来得很晚,但我希望它能帮助那些遇到类似问题的人(就像我一样)。
是由gnustl_static编译的opencv发行版中的所有文件吗?
似乎OpenCV 3.X-android (甚至是撰写本文时最新的3.4.12 )使用了gnustl_statc。这意味着所有stl组件都驻留在名称空间std中。但是对于OpenCV 4.X-android,库是用c++_static编译的,所以stl组件位于名称空间std::__ndk1中。
为什么__ndk1出现在std::载体中?
是。
对于一个大型项目,不同的工程师承担不同的子任务.它们应该连接一个常见的stl实现吗?静态联动和动态联动的要求不同吗?
不是很确定..。
https://stackoverflow.com/questions/60187193
复制相似问题