【问题标题】:NDK-link a library into another library"Cannot load library: link_image[1966]: 1765 could not load needed library..."NDK 将一个库链接到另一个库“无法加载库:link_image [1966]:1765 无法加载所需的库......”
【发布时间】:2012-06-27 08:31:38
【问题描述】:

首先我想告诉你我想做什么。我有一个 .h 文件和一个 .c 文件,其中包含常用的 C 代码,我用它创建了一个与 Android NDK 的共享库。所以现在我有一个名为 libtry.so 的 .so 文件。此外,我想在我的 Android Eclipse 项目中使用本机代码。所以我创建了带有“计数器”类和内容的 .java 文件

public native static int Number(int n);

static
{
   System.loadLibrary("test");
}

然后我使用 javah 工具从 .java 文件创建一个 C 头文件。

之后,我为 C-Headerfile 创建了一个 C-sourcefile,我在其中实现了本机代码。

然后我用LOCAL_MODULE := test 为这两个文件创建一个共享库,因此该文件将被命名为libtest.so。但重点是,我想将一开始创建的共享库 libtry.so 链接到这个共享库。

所以在 libtest.so 的 Android.mk 文件中,我输入了 LOCAL_LDLIBS := -L/root/Android/Samples/Test/libs/ -ltry

实际上这是可行的,因为我可以使用 ndk-build 编译这个 Android.mk 文件。

但现在在我的 Eclipse 项目中,如果我想使用库 libtest.so 它不起作用。我的意思是,如果我创建一个加载库 libtest.so 的“计数器”类的对象,

我收到了error: "Cannot load library: link_image[1966]: 1752 could not load needed library 'libtry.so' for 'libtest.so'"

我做错了什么?提前致谢。

【问题讨论】:

  • 您是在将您的 so 文件用于不同的项目还是您拥有 C 代码的项目
  • 对于同一个项目。实际上,我想再次解释一下以获取更多详细信息。 .so 文件 libtry.so 包含 libtest.so 必须使用的函数。所以我所做的是将 libtry.so 链接到 libtest.so 的 Android.mk 中的 libtest.so,如我的第一条评论中所示。我可以用 ndk-buid 编译。但由于本主题标题中显示的错误,我无法在我的 Eclipse 项目中使用 libtest.so。
  • 我对这个链接的回答已被删除。 stackoverflow.com/questions/10593987/android-ndk-linking/… 回复您的回复,是的,链接中的步骤显示了如何仅使用 c 源构建第三个 libtry.so。就我而言,它是一个物理库,我们必须在许多游戏中使用它。所以我们考虑构建一个单独的库以备将来使用。
  • 感谢 codetiger 提供的链接。我会试一试,告诉你它是如何工作的。
  • 这个问题你解决了吗?我遇到了同样的错误

标签: android android-ndk


【解决方案1】:

您正在将一个库链接到一个库。在 Java 代码中,它们必须以相反的顺序显式加载,例如

static
    {
        System.loadLibrary("dependencylib"); // try 
        System.loadLibrary("mainlib");       // test
    }

答案来自here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2013-07-12
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多