gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:28:11 25 4
gpt4 key购买 nike

我正在开始我的第一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com