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

时间:2017-12-14 12:47:15

标签: android c++ c android-ndk compatibility

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

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

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

1 个答案:

答案 0 :(得分:2)

当您使用不同的NDK版本时,您无法定位相同的C ++运行时。 STL版本没有太大变化,但没有稳定性的合同。

除了这一说法,来自NDK r16的静态库将与r14正确配合,反之亦然,但差距越大,您应该处理的故障就越多。

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

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