【问题标题】:Android system loadlibary error for cross compiled libxml交叉编译的 libxml 的 Android 系统 loadlibary 错误
【发布时间】:2013-04-10 17:36:48
【问题描述】:

我通过使用 android ndk 更改 CC、CFALGS LDFLAGS 为 android 交叉编译了 libxml2-2.90。运行config和make,编译成功。

然后我用原生 c 编写了简单的基于 libxml2 的示例,并编写了包含上述库和包含编译共享库的 Android.mk 文件。

1.我使用ndk-build脚本,成功编译原生libxml应用

  1. 我把这两个库放在了android项目/libs/armeabi中
  2. 然后我在android java应用代码中加载了这两个库

    System.loadLibrary("xml2"); //libxml2.so.2.9.0

    System.loadLibrary("samplexml2"); //libsamplexml2.so

但是当我运行我的应用程序时,我得到了以下 android 应用程序的运行时错误。

异常 Ljava/lang/UnsatisfiedLinkError;初始化 Lcom/example/xmlsample/XmlParse 时抛出;

原因:java.lang.UnsatisfiedLinkError:无法加载库:link_image[1891]:37 无法加载“libsamplexml2.so”所需的库'libxml2.so.2'(load_library[ 1093]:找不到库'libxml2.so.2')

请帮助如何正确链接 xml2 库..

【问题讨论】:

    标签: android android-ndk libxml2


    【解决方案1】:

    在为 android 进行交叉编译时,您必须禁用为库设置 soname。如果您使用 automake,请将 -version-info SOME:VERSION:NUMBER 替换为 -avoid-version,然后重新配置并重新编译您的库 (libxml) 和所有依赖项 (libsamplexml)。

    【讨论】:

    • 既然 makefile 很大,你能告诉我如何删除 config 或 makefile 中的版本,我可以更改并只生成 libxml2.so.0.0.0 ..
    • 我假设您使用 android 的独立工具链来构建您的库。编辑Makefile.am找到字符串-version-info @LIBXML_VERSION_INFO@,把这个字符串替换成-avoid-version然后启动sh autogen.sh,然后重新配置。编译后可以查看sonamearm-linux-androideabi-objdump -p libxml.so | grep SONAME
    猜你喜欢
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2013-12-09
    相关资源
    最近更新 更多