【发布时间】:2011-03-13 22:18:52
【问题描述】:
我是 Android NDK 的新手,我不了解静态库和共享库之间的区别。它们是什么,我什么时候会选择一种而不是另一种?
【问题讨论】:
标签: android android-ndk
我是 Android NDK 的新手,我不了解静态库和共享库之间的区别。它们是什么,我什么时候会选择一种而不是另一种?
【问题讨论】:
标签: android android-ndk
共享库一词并不完全适合 Android 的 NDK,因为在许多情况下,.so 库实际上并未在应用程序之间共享。最好将 NDK 构建的库分为静态库和动态库。
每个 Android 应用程序都是 Java 应用程序,NDK 代码的唯一入口点是将其作为动态库加载并通过 JNI 调用。
静态库是已编译目标文件的存档。它们在构建时被捆绑在其他库中。 NDK 会剥离静态库中未使用的代码部分以减小总大小。
动态库在运行时从单独的文件中加载。它们可以包含它们所依赖的静态库或加载更多动态库。
因此,Android 开发真正需要的是至少一个共享库,该库将从 Java 代码中调用,并最好将其作为静态库链接到它的依赖项。
【讨论】:
本机共享库:NDK 从您的本机源代码构建这些库或 .so 文件。 原生静态库:NDK 还可以构建静态库或 .a 文件,您可以将其链接到其他库。
这是根据 NDK 文档
【讨论】:
静态库 - 在链接过程中,所有库二进制文件都将作为可执行文件的一部分包含在内。因此,我们不再需要这些库,但它会增加可执行文件的大小。
共享库——最终的可执行文件只有库的引用,而不是代码本身。它要求我们运行可执行文件的环境可以访问我们程序使用的所有库文件。
【讨论】: