【问题标题】:JNI java load so and got undefined symbol ExcetionJNI java加载so并得到未定义的符号异常
【发布时间】:2020-02-01 07:30:01
【问题描述】:

当我加载本地编译的so时,我得到了异常:

Caused by: java.lang.UnsatisfiedLinkError: /home/admin/libLprProcessor.so: /home/admin/libLprProcessor.so: undefined symbol: _ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEm
  at java.lang.ClassLoader$NativeLibrary.load(Native Method) ~[?:1.8.0_91]
  at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) ~[?:1.8.0_91]
  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) ~[?:1.8.0_91]
  at java.lang.Runtime.load0(Runtime.java:809) ~[?:1.8.0_91]
  at java.lang.System.load(System.java:1086) ~[?:1.8.0_91]

【问题讨论】:

    标签: java-native-interface shared-libraries


    【解决方案1】:

    您的库 /home/admin/libLprProcessor.so 很可能与另一个库链接 - 一个包含 _ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEm 的库。

    你有几个选择:

    1. libLprProcessor.so 与此库链接,这样您就可以传递-rpath。这样,这个额外的库将从libLprProcessor.so 正确指向

    2. 将此库添加到java.library.path指向的位置

    3. 在开始你的 Java 代码之前,确保导出 LD_LIBRARY_PATH 这样它指向 libLprProcessor.so 使用的库

    【讨论】:

      【解决方案2】:

      (.so) 文件是类似于 windows 中的 .dll 文件的共享对象,用于通过 JNI 加载它们,您需要将它们放在 /lib/usr/lib 用于 linux,位于 windows 的 system32 文件夹下。 程序从特定位置读取这些文件,因此您需要安装或将它们放在正确的位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 2022-10-25
        • 1970-01-01
        • 1970-01-01
        • 2013-10-22
        • 2023-03-15
        • 1970-01-01
        相关资源
        最近更新 更多