gpt4 book ai didi

java - JNI UnsatisfiedLinkError undefined symbol

转载 作者:行者123 更新时间:2023-11-29 09:31:57 24 4
gpt4 key购买 nike

我正在尝试使用 JNI 加载 .so 文件 (libInfExprParser.so)。我没有这个共享对象的源代码。我收到以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError:/home/tomcat/sahithi/ExprParser/libInfExprParser.so: /home/tomcat/sahithi/ExprParser/libInfExprParser.so: undefined symbol: _ZN8IUStringC1EPKcm at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(Unknown Source) at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source) at expressionparser.Main.(Main.java:20)

Java代码:

native void parseExpr();

static {
System.loadLibrary("InfExprParser");
System.out.println("Loaded expr parser");
}

public static void main(String[] args) {
Main mainObj = new Main().parseExpr();
}

我使用的是 Redhat Linux 64 位。

编辑:

我运行了以下命令来获取依赖库的列表:

[tomcat@zeus ExprParser]$ readelf -d libInfExprParser.so

Dynamic section at offset 0xa048 contains 26 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000c (INIT) 0x3ed8
0x000000000000000d (FINI) 0x8628
0x0000000000000004 (HASH) 0x158
0x000000006ffffef5 (GNU_HASH) 0x658
0x0000000000000005 (STRTAB) 0x1cc8
0x0000000000000006 (SYMTAB) 0xb40
0x000000000000000a (STRSZ) 4315 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000003 (PLTGOT) 0x20a420
0x0000000000000002 (PLTRELSZ) 1776 (bytes)
0x0000000000000014 (PLTREL) RELA
0x0000000000000017 (JMPREL) 0x37e8
0x0000000000000007 (RELA) 0x2f90
0x0000000000000008 (RELASZ) 2136 (bytes)
0x0000000000000009 (RELAENT) 24 (bytes)
0x000000006ffffffe (VERNEED) 0x2f20
0x000000006fffffff (VERNEEDNUM) 3
0x000000006ffffff0 (VERSYM) 0x2da4
0x000000006ffffff9 (RELACOUNT) 26
0x0000000000000000 (NULL) 0x0


在 6 个共享库中,有 5 个位于以下位置:/lib 和/lib64
libstdc++.so.6 位于以下位置:/usr/lib 和/usr/lib64
不知道会在哪个位置搜索依赖库。我尝试设置 LD_LIBRARY_PATH 并按如下方式执行 jar:

$ export LD_LIBRARY_PATH=/lib64:/usr/lib64
$ java -jar -Djava.library.path=/home/tomcat/sahithi/ExprParser:/lib64:/usr/lib64 ExpressionParser.jar

$ export LD_LIBRARY_PATH=/lib:/usr/lib
$ java -jar -Djava.library.path=/home/tomcat/sahithi/ExprParser:/lib:/usr/lib ExpressionParser.jar

这些似乎都不起作用。得到了和以前一样的错误。还有什么我可以尝试的吗?谢谢。

最佳答案

该库依赖于其他一些不存在的共享库,其中包含缺少的入口点。

查看安装说明。

关于java - JNI UnsatisfiedLinkError undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30826494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com