【问题标题】:Understanding LD_LIBRARY_PATH and missing shared libraries (for Mujoco)了解 LD_LIBRARY_PATH 和缺少共享库(对于 Mujoco)
【发布时间】: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


    【解决方案1】:

    您可能处理的不是LD_LIBRARY_PATH 行为,而是您正在测试的库的一个特征。

    这是您提供链接的页面的引述:

    代码示例期望激活密钥名为 mjkey.txt 并与可执行文件位于同一目录中,但这也可以更改。

    如果您没有采取任何措施来更改该默认行为,那么您看到的行为似乎与上述政策非常一致。

    【讨论】:

    • 是的,我想这是有道理的。我正在使用的代码(依赖于 Mujoco)似乎运行良好,所以我想没有必要担心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 2020-01-01
    • 1970-01-01
    相关资源
    最近更新 更多