2011-03-29 131 views
5

我正在使用的Tibco RV在Linux服务器上的Java应用程序,并且我收到以下错误:库未找到:tibrvj

TibrvException[error=901,message=Library not found: tibrvj] 

是什么原因造成这个问题?

我已经将包含*.so的lib路径添加到LD_LIBRARY_PATH中,但结果仍然相同。

UPDATE:

目前,我有<MyApp>/libs/tibrvj.jar加入classpath。 tibrvj.jar从Windows环境复制到我运行我的应用程序的Linux机器上。我从类路径中删除了这个,并添加了另一个参考<TibcoDirectory>/libs/tibrvj.jar,它修复了这个问题。它们与前一个文件的大小不同,从Windows复制的文件与目前在Linux中的文件可能存在差异。有人可以解释为什么这样吗?

回答

2

你使用System.loadLibrary(“tibrvj”)加载了库吗?你有没有把它添加到java.library.path?

+0

我装它使用Tibrv.open(Tibrv.IMPL_NATIVE)。 – jasonline 2011-03-29 09:04:46

+0

不确定你的意思 - 我相信为了使用本地库,你必须一次加载到JVM中,以便类加载器知道它。通常我会在静态初始化器中执行此操作。您在java中提到的Tibrv.open()语句是什么? – DaveH 2011-03-29 09:11:08

+0

是的,这是导致错误的确切线。 – jasonline 2011-03-29 09:26:13

7

我有同样的问题,我固定它执行以下操作:

  1. 文件tibrvj.jar出现在我的应用程序的classpath
  2. 文件tibrvj.dll是通过java库路径存在。此文件通常位于Tibco Rendezvous主目录(例如C:/tibco/tibrv/8.2/bin)中的bin目录中
  3. 安装的java版本与安装的tibco版本兼容。

我的环境是:

  1. Windows 7中,64位
  2. Tibco的楼台8.2,64位
  3. JDK 1.6u29,64位

之前,我已经安装了JDK 1.6 u17,用于i586处理器,当我尝试加载使用库时:

System.loadLibrary("tibrvj"); 

我得到这个错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\TIBCO\tibrv\8.2\bin\tibrvj.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform 

它给我的线索安设了正确的Java版本。

0

rchavarria和DaveHowes的答案对我有帮助,但对我来说,问题在于我的IDE在运行我的项目时重写了PATH变量(因此也覆盖了java.library.path)。

删除此重写使其工作,因为外部IDE tibrv已经在PATH上。

0

你在使用包装?

您是否在wrapper.conf中设置了java.library.path? 我在wrapper.conf中设置了java.library.path,更正这个值为我解决了这个问题。

0

使用

java -Djava.library.path=/opt/tibco/tibrv/lib -cp {}.jar 

LD_LIBRARY_PATH=/opt/tibco/tibrv/lib export LD_LIBRARY_PATH 

然后**System.loadLibrary("tibrvj");**