当前位置: 首页 > 知识库问答 >
问题:

未定义符号

羊舌高爽
2023-03-14

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

线程“main”java中出现异常。lang.unsatifiedlinkerror:/home/tomcat/sahiti/ExprParser/libinfexparser。所以:/home/tomcat/sahiti/ExprParser/libinexprparser。所以:未定义的符号:ZN8IUStringC1EPKcm在java。lang.ClassLoader$NativeLibrary。在java上加载(本机方法)。lang.ClassLoader。java上的loadLibrary0(未知源代码)。lang.ClassLoader。java上的loadLibrary(未知源代码)。lang.Runtime。java上的loadLibrary0(未知源)
。lang.System。expressionparser上的loadLibrary(未知源)。主要的(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();    
}

我使用的是64位Redhat Linux。

编辑:

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

[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

这一切似乎都没有奏效。得到了和以前一样的错误。还有什么我可以尝试的吗?谢谢。

共有2个答案

师冥夜
2023-03-14

请确保在使用系统时。loadLibrary(“libname”),则必须在系统路径变量上设置该库

作为替代,您可以使用系统。load(“path to lib”)在这里,您不需要设置lib at path变量,只需提供lib的绝对或相对路径即可。

请检查您的情况与上述情况。

郦何平
2023-03-14

该库依赖于不存在的其他共享库,其中包含缺失的切入点。

查看安装说明。

 类似资料:
  • 问题内容: 我正在尝试使用一百万首歌曲数据集,为此,我不得不安装python表,numpy,cython,hdf5,numexpr等。 昨天我设法安装了所有需要的东西,并且在使用hdf5遇到了一些麻烦之后,我下载了预编译的二进制程序包,并将它们保存在我的/ bin文件夹和/ lib中的相应库中,然后测试了此python脚本: 而且工作正常,要明确我的工作方式是先运行脚本并开始安装所需的依赖项,但是

  • 问题内容: 当我尝试在python中执行我的主文件时遇到问题(我在使用python 2.7的Ubuntu 12.04上)。我收到此错误: 目前scipy是使用Python软件包管理器安装的(请参阅我以前的文章:python:scipy安装在ubuntu上)。 谢谢。 问题答案: 您正在使用与用于编译scipy的Python解释器不同的Python解释器来运行代码。这通常发生在使用Unicode U

  • 问题内容: 我只是试图制作一个简单的类,让我弄清楚文件的长度: 我遇到了一个问题 我得到错误: 未为参数类型定义运算符!= int,null 有什么想法为什么会阻止这种情况吗? 问题答案: Java中的原始类型不能为。如果要检查0,请执行。

  • 我正在尝试JNI示例代码。 (您可以通过github获得以下所有源代码:https://github.com/pilhoon/jni-test) sample.java sample.c 采样.h 我在CentOS6.3上用gcc编译了这些 但是当我运行'java sample'时,出现了一个错误。 我该怎么解决这个?

  • 问题内容: 当我尝试在python中执行我的主文件时遇到问题(我在使用python 2.7的Ubuntu 12.04上)。我收到此错误: 目前scipy是通过Python软件包管理器安装的。 谢谢。 问题答案: 您正在使用与用于编译scipy的Python解释器不同的Python解释器来运行代码。这通常发生在使用Unicode UCS2支持编译的Python安装程序,运行针对使用UnicodeUC

  • 问题内容: 注意:根据 ECMAScript5.1,第15.1.1.3节,window.undefined是只读的。 现代浏览器正确地实现了这一点。 例如:Safari 5.1,Firefox 7,Chrome 20等。 Undefined仍可在以下位置更改:Chrome 14,… 原来,问题的原因是 如果“对象”中没有属性“ x”,则返回false。 我通过在两个Facebook函数中用规则相等