首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用NDK不能存在不同的stl实现?

问为什么使用NDK不能存在不同的stl实现?
EN

Stack Overflow用户
提问于 2020-02-12 11:20:40
回答 1查看 226关注 0票数 1

我试图构建一个基于两个开源库的项目。我使用的库是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?

  • Why __ndk1编译的opencv版本中的文件都出现在std::vector?

  • For one大型项目中,不同的工程师承担不同的子任务。它们应该连接一个常见的stl实现吗?静态联动和动态联动的要求不同吗?
EN

回答 1

Stack Overflow用户

发布于 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实现吗?静态联动和动态联动的要求不同吗?

不是很确定..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60187193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档