【问题标题】:Use Android .so in Java code在 Java 代码中使用 Android .so
【发布时间】:2016-05-27 09:59:35
【问题描述】:

美好的一天。我有一个库 .so 在 x86 Android 上运行良好。 如何在 Java 中使用这个库?

System.getProperty("sun.arch.data.model").equals("32");

是的

static
    {
        System.loadLibrary("full/path/to/library/liblibrary.so");
    }

线程“主”java.lang.UnsatisfiedLinkError 中的异常:否 java.library.path中的full/path/to/library/liblibrary.so

也许它使用了来自 Android NDK 的一些库?

【问题讨论】:

  • 如果你有完整的路径,你可以使用System.load而不是loadLibrary。您放入loadLibrary 的字符串将映射到特定于平台的库名称。您可以通过调用System.mapLibraryName 来查看结果。 iirc,在 linux 上,“library”将被映射到“liblibrary.so”。
  • 谢谢。 System.load - 工作。但是现在出现了一个新错误:线程“main”中的异常 java.lang.UnsatisfiedLinkError: library.so: Can't load this .dll (machine code=0x34) on a AMD 64-bit platform 我也尝试在 x86 JVM Exception in线程 "main" java.lang.UnsatisfiedLinkError: library.so: Can't load this .dll (machine code=0x34) on a IA 32-bit platform
  • 我无能为力...抱歉。

标签: java android android-ndk java-native-interface shared-libraries


【解决方案1】:

System.loadLibrary 的参数是程序员任意选择的库名称。系统遵循标准但特定于平台的方法将库名称转换为本机库名称。例如,Solaris 系统将名称 pkg_Cls 转换为 libpkg_Cls.so,而 Win32 系统将相同的 pkg_Cls 名称转换为 pkg_Cls.dll

更多来自这里at Oracle's JNI documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多