android - 使用不同 NDL 编译的 C/C++ 代码的向前/向后兼容性?

标签 android c++ c android-ndk compatibility

我正在开始我的第一个 Android 编程,将一些用 C 和 C++ 编写的库移植到 Android。我没有构建应用程序,除了测试库:产品是库,将提供给我的客户。这些库是数学模型,在设备上运行,没有 Web 或云界面:想要在云中运行它们的客户已经这样做了,使用 Linux 或 Windows 构建。

我的初始客户使用的是 NDK 14b。我可以使用它,或者我可以使用最新的 NDK,16b。如果我使用 NDK 16b、兼容的指令集以及与我的客户相同的 C++ 运行时和目标 API 版本编译 C 代码,他们是否能够使用我在他们的 NDK 14b 应用程序中构建的静态库?

反过来也很有趣:如果我使用 NDK 14b,而另一个客户使用 NDK 16b,我用 14b 构建的静态库是否可以在他们的 16b 构建的应用程序中运行?我会针对它们使用相同或更早的 API,以及相同的指令集和 C++ 运行时。

附录,很久以后:构建 .so 库被证明是如此简单,以至于我从未使用过任何其他东西。

最佳答案

当您使用不同的 NDK 版本时,您不能以相同的 C++ 运行时为目标。 STL 版本变化不大,但没有关于其稳定性的契约(Contract)。

除此备注外,NDK r16 的静态库将与 r14 正确协作,反之亦然,但差距越大,您应该处理的故障就越多。

一般来说,NDK 改进涉及错误修复,因此有使用最新版本的动机。但是在支持更新的平台版本方面取得了重大进展。这意味着如果您的库将链接到以 Lollipop 为目标的应用程序,则 r16 的优势将不那么突出。

请注意,如果您可以将您的库作为链接的共享库发布(如此),您与宿主应用程序的相互依赖性将会大大降低,根据我的经验,这会提高稳定性并减少冲突。如果这是相关的,这种方式也更安全。

关于android - 使用不同 NDL 编译的 C/C++ 代码的向前/向后兼容性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47813764/

相关文章:

java - 错误 "Attempt to invoke virtual method ' 双 java.lang.Double.doubleValue( )' on a null object reference"

使用 gcc 编译多个 C 文件

javascript - 如何在电话号码输入中插入连字符?

android - Boot 上的 Launch Activity 已完成,Mount 上的另一个 Activity 已完成

c++ - 使用 Windows Imaging Component 将 EMF 转换为 BMP(元文件到位图)

c++ - 缩放以匹配大小

c - 下面的代码有什么问题?如何纠正这个问题?

c++ - 如何在 C++ 中部分初始化 C 结构数组?

java - 如果我将变量复制到另一个变量并尝试更改它,是否会使变量 volatile 起作用?

c++ - 如何在 C++ 11 中将 const 添加到元组的 get<>(t) 函数中?