为什么使用 NDK 不能存在不同的 stl 实现?
Why can't different stl implementations exist using NDK?
我尝试基于两个开源库构建一个项目。我正在使用的库是OpenCV和ceres。libopencv_java3.so是网站github发布的OpenCV3.1.2,其中包括OpenCV-3.1.0-android-sdk。libceres.so 是我自己从 souce 代码编译的。
当我构建应用程序时,NDK 构建会生成以下信息:
clang++.exe:警告:编译期间未使用的参数:"-nostdlib++" [-Wunused-command-line-argument]
error: 未定义对 'cv::imwrite(cv::String const&, cv::_InputArray const&, std::__ndk1::vector> const&(' 的未定义引用
谷歌搜索后,我找到一个相关帖子
错误 未定义对"std::__ndk1::locale::~locale(("的引用 答案是使用不同的 STL 实现。
就我而言,libopencv_java.so 可能使用 gnustl_static,而 libceres 使用 c++_static。 我不明白原因。这两个实现都是静态库,不应发生冲突。
- opencv 版本中的所有文件都是用gnustl_static编译的吗?
- 为什么__ndk1出现在 std::vector 中?
- 对于一个大型项目,不同的工程师承担不同的子任务。他们应该链接一个通用的 stl 实现吗?静态联动和动联的要求不同吗?
这个答案来得晚了,但我希望它可以帮助遇到类似问题的人(就像我一样(。
opencv 版本中的所有文件都是用gnustl_static编译的吗?
似乎OpenCV 3.X-android(甚至是撰写本文时最新的3.4.12(使用gnustl_statc
。这意味着所有 stl 组件都驻留在命名空间std
中。 但是对于OpenCV 4.X-android,该库已使用c++_static
编译,因此stl组件位于命名空间std::__ndk1
中。
为什么__ndk1出现在 std::vector 中?
它是内联命名空间。
对于一个大型项目,不同的工程师承担不同的子任务。他们应该链接一个通用的 stl 实现吗?静态联动和动联的要求不同吗?
不确定...
- 为什么使用 NDK 不能存在不同的 stl 实现?
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- 如何使用STL实现Prim算法?
- 有没有办法让 C 预处理器更改我正在使用的 STL 实现?
- C 11 std ::在不同的STL实现中使用哪些算法
- 使用C 中的STL实现DF时遇到的分割故障
- 为什么STL实现不使用断言来检测未定义的行为
- 支持C++11的开源STL实现
- C++对原始STL实现中"construct"方法逻辑的理解
- C++11 及更高版本中的替代 STL 实现
- 修复使用 OpenCV 的混合 STL 实现
- 为什么我们需要交换在反向STL实现?加速c++(第8.4节)
- BFS的STL实现:访问邻接列表时出现问题
- 在STL实现中有中心分配队列或向量吗?
- 在c++中使用STL实现BFS
- 如果一个Android NDK应用程序加载了多个共享的c++ STL实现,它的行为是什么?
- STL实现的MVP设计模式
- 用STL c++实现非递增列表
- 如何使用STL实现自定义字符串类?
- 视觉 C++标准是否指定编译器的 STL 实现详细信息