【发布时间】:2017-04-03 22:17:16
【问题描述】:
我最近安装了Mujoco 1.31 的免费试用版。 (不过,这个问题比这更笼统;Mujoco 是一个商业物理库,需要获取特定于计算机的mjkey.txt 文件才能运行它。)我一直在观察$LD_LIBRARY_PATH 的一些行为,这让我感到困惑.
这是相关内容的目录。我在目录/home/daniel/mjpro131 中。 mjkey.txt 文本出现在两个地方,因为我必须在 bin 目录中有一个副本才能运行代码。
$ ls
bin doc include LICENSE.txt mjkey.txt model sample
$ ls -lh bin/
total 2.1M
-rwxrwxr-x 1 daniel daniel 14K Apr 23 2016 compile
-rwxr-xr-x 1 daniel daniel 123K Apr 23 2016 libglfw.so.3
-rwxrwxr-x 1 daniel daniel 1.8M Apr 23 2016 libmujoco131.so
-rw-rw-r-- 1 daniel daniel 876 Apr 3 14:52 mjkey.txt
-rw-rw-r-- 1 daniel daniel 156 Apr 3 14:52 MUJOCO_LOG.TXT
-rwxrwxr-x 1 daniel daniel 30K Apr 23 2016 simulate
-rwxrwxr-x 1 daniel daniel 51K Apr 23 2016 test
$ ls -lh model/
total 12K
-rwxr-xr-x 1 daniel daniel 9.4K Apr 23 2016 humanoid.xml
getting started instructions 说试试模拟器代码。 (这些说明适用于 1.40 版,但仍适用于 1.31。)我尝试运行以下命令,但它不起作用:
$ ./bin/simulate model/humanoid.xml
./bin/simulate: error while loading shared libraries: ../bin/libmujoco131.so: cannot open shared object file: No such file or directory
然而,当我进入 inside bin 目录时,模拟器代码可以工作:
$ cd bin/
$ ./simulate ../model/humanoid.xml
MuJoCo Pro library version 1.31
这可行,我很乐意继续这样做,但我真的很想了解为什么我的第一次尝试失败了。通过查看 StackOverflow,我发现我得到的错误可能与 LD_LIBRARY_PATH 变量有关。这里是:
$ echo $LD_LIBRARY_PATH
/usr/local/cuda-8.0/lib64:/home/daniel/mjpro131/bin:/home/daniel/mjpro131
$ pwd
/home/daniel/mjpro131
$ ls
bin doc include LICENSE.txt mjkey.txt model sample
这是我.bashrc的相关行:
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/daniel/mjpro131/bin:/home/daniel/mjpro131
并且我确保在尝试运行模拟器代码之前获取它。此外,在尝试运行模拟器之前,我运行了 sudo ldconfig,这是由 StackOverflow 的其他一些问题所建议的。不幸的是,当我在mjpro131的顶级目录时,我仍然无法运行Mujoco模拟器。
问题:我认为LD_LIBRARY_PATH 应该能够找到/home/daniel/mjpro131/bin 以及其中的任何库。但是,情况似乎并非如此,因为它找不到libmujoco131.so。我在这里遗漏了什么明显的东西吗?
我使用的是 Ubuntu 16.04。
【问题讨论】:
标签: c++ bash shared-libraries ld bin