我是Android NDK的新手,我不了解静态库和共享库之间的区别。它们是什么,何时我会选择一种类型而不是另一种?
答案 0 :(得分:58)
术语共享库并不适合Android的NDK,因为在许多情况下,.so库实际上并不是在应用程序之间共享。最好将NDK构建的库分类为静态和动态。
每个Android应用程序都是一个Java应用程序,NDK代码的唯一入口点是将其作为动态库加载并通过JNI调用它。
静态库是编译对象文件的归档。它们在构建时捆绑在其他库中。 NDK剥离了静态库中未使用的代码部分,以减小总大小。
动态库在运行时从单独的文件加载。它们可以包含它们所依赖的静态库,也可以加载更多动态库。
因此,Android开发实际需要的是至少一个共享库,它将从Java代码调用,并最好与它的依赖关系作为静态库链接。
答案 1 :(得分:1)
本机共享库:NDK从本机源代码构建这些库或.so文件。 本机静态库:NDK还可以构建静态库或.a文件,您可以将其链接到其他库。
这是根据NDK文档
答案 2 :(得分:0)
静态库–在链接过程中,所有库二进制文件都将作为可执行文件的一部分包含在内。因此,我们不再需要这些库,但是它将增加我们的可执行文件的大小。
共享库–最终的可执行文件仅具有对库的引用,而没有代码本身。它要求我们运行可执行文件的环境有权访问程序使用的所有libs文件。