1

我试图实现 NDK 共享库需要在 Linux 中编译为 .so 文件的其他外部本机库。

我有以下关系:libl1 依赖于 libl2。

我尝试将预构建的 libl2.so 作为共享并将其添加到 libl1 模块中。当我像这样加载 libl1 时,一切都编译得很好,并且在我的 LG Nexus 4 上工作正常:

static {
  System.loadLibrary('l1');
}

但它不适用于三星 4.03 Android 版本。在此设备中,它使用以下代码:

static {
  System.loadLibrary('l2');
  System.loadLibrary('l1');
}

我发现Android ClassLoader 无法加载依赖。但为什么它在 Nexus 4 上运行良好?但不是三星设备?

4

1 回答 1

2

您在 Nexus4 上看到的行为不是预期的,我再次测试没有特殊处理,至少在 v. 4.2.2(构建 JDQ39)。也许您的 Nexus 上安装了其他 Android 设备?/system/lib/libl2.so也许您的设备出于某种原因碰巧有文件?

您的三星设备的行为是预期的,这是 Android 团队认为正确的。所有共享库都必须按照它们从 Java 中的依赖顺序加载,或者dlopen()如果您愿意,您始终可以显式调用,但会失去使用链接器为您解析这些共享库中的函数引用的所有简单性。

于 2013-10-08T08:38:13.103 回答