假设我有一个包含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构建允许未定义的符号,然后确保在我将它们全部包含在最终项目中时找到它们?
答案 0 :(得分:0)
事实证明,如果将它们编译为静态库(.a)并使用include $(PREBUILT_STATIC_LIBRARY)
方法将它们包含在项目中,并按LOCAL_WHOLE_STATIC_LIBRARIES中的依赖顺序列出它们:= BA