如何正确解决最终apk中的android ndk共享库依赖项

时间:2013-11-06 22:55:07

标签: build android-ndk shared-libraries

假设我有一个包含3个项目的MVS解决方案。其中2个是库,第3个是exe。 A.lib,B.lib,C.exe。 A取决于B,C包括A和B,我们都很高兴,当我们在C中包含两者时,链接器会从B中找到所需的A。

我正在尝试使用android ndk(使用ndk-build)复制它,所以最简单的方法似乎是创建2个共享库(A.so和B.so)并将它们包含在第三个C.so然后在C.apk中被打包为本机活动。

显然A.so不会构建,除非我在其makefile中包含B.so。所以没有

A.lib---> C.exe
B.lib--/

就像我在windows中一样,我现在需要:

B.so --> A.so --> C.so

随着更多库的添加,这变得非常混乱,因为在将lib添加到最终apk时不是解析链接器符号,而是需要在每个lib中解析它们。 可以使用以下方法绕过此行为:

LOCAL_ALLOW_UNDEFINED_SYMBOLS=true

在库的Android.mk中,但随后用

将它们加载到应用程序中
static 
{
 System.loadLibrary("B");
 System.loadLibrary("A");
}

它会在运行时失败,说A找不到一些符号(在B中定义)。

是否有一种“正确”的方法可以让各个lib构建允许未定义的符号,然后确保在我将它们全部包含在最终项目中时找到它们?

1 个答案:

答案 0 :(得分:0)

事实证明,如果将它们编译为静态库(.a)并使用include $(PREBUILT_STATIC_LIBRARY)方法将它们包含在项目中,并按LOCAL_WHOLE_STATIC_LIBRARIES中的依赖顺序列出它们:= BA