我目前正在Linux虚拟机上使用某些Java插件,我将它们安装到Eclipse中,方法是将它们放入 / opt / eclipse / dropins 文件夹中。我的插件需要支持CentOS 6和CentOS 7虚拟机(不应该是一个大问题,因为它们是用Java编写的,并且两种类型的CentOS都安装了Java 1.8.0)。我的插件在两个操作系统上构建和安装都很好。我在Eclipse中看到它们并且可以按预期与它们进行交互。
我需要支持的VM可以是我的机器本地(使用VMWare Player / Workstation打开)或托管在云服务器上。我们使用Windows远程桌面通过Linux服务器上的xrdp进入云虚拟机。
我的一个插件需要 /opt/rti_connext_dds-5.2.3/lib/x64Linux3gcc4.8.2 中的 nddsjava.so 。
在本地虚拟机(CentOS 6和7)上,我只需在/etc/profile.d脚本中设置LD_LIBRARY_PATH,这样任何登录的用户都可以获得所需C ++库的路径。
在CentOS 7云虚拟机上,当调用此插件时,我得到java.lang.UnsatisfiedLinkError: no nddsjava in java.library.path
。当通过Linux菜单打开Eclipse时,会发生 。如果我打开一个终端并从那里启动Eclipse,那么该插件可以找到C ++库(因为我的LD_LIBRARY_PATH是在我的/ bin / bash终端中设置的)。我做了一点挖掘,发现运行chmod g-s /usr/bin/ssh-agent
修复了从Linux菜单打开Eclipse时的问题(是的,我知道chmod会打开一个安全漏洞。我愿意看看这个。)
在CentOS 6云虚拟机上,我从未获得过查找C ++库的插件。通过 xrdp 登录时,LD_LIBRARY_PATH似乎被删除了,无论出于何种原因,CentOS 6似乎明确没有在主顶级gnome-session进程中获取任何配置文件脚本,这意味着其他进程从GUI生成的也不会有LD_LIBRARY_PATH。
我还尝试将-Djava.library.path
添加到我的eclipse.ini
文件中,但没有运气。它将在下一个所需的C ++库上失败,即使它位于同一目录中:java.lang.UnsatisfiedLinkError: /opt/rti_connext_dds-5.2.3/lib/x64Linux3gcc4.8.2/libnddsjava.so: libnddsc.so: cannot open shared object file: No such file or directory
是否有一个地方我可以为我试图支持的所有Linux版本设置LD_LIBRARY_PATH(本地CentOS 6,xrdp CentOS 6,本地CentOS 7和xrdp CentOS 7)?
答案 0 :(得分:0)
注意:当我说下面的云虚拟机时,我的意思是服务器托管的虚拟机,我通过 xrdp 进行Windows远程桌面操作。
来自服务器故障的 This回答在CentOS 6云VM中为我工作。 CentOS 7云虚拟机在startwm.sh
中没有/etc/xrdp
脚本。相反,它位于/usr/libexec/xrdp
并且不包含xinitrc
行(在服务器故障链接中引用)导致CentOS 6云VM中的问题。其他东西必须擦除CentOS 7云VM中的LD_LIBRARY_PATH变量,所以我仍然需要执行chmod g-s /usr/bin/ssh-agent
以允许在启动时调用我的/etc/profile.d
脚本。