【发布时间】:2017-01-05 20:58:26
【问题描述】:
我已经安装了一个 R 包,但是为了通过 library 加载它,需要将 LD_LIBRARY_PATH 设置为其中一个名为 libhts.so.2 的库所在的路径。只有在进入 R 之前编辑 LD_LIBRARY_PATH 时加载才有效,不是之后。
我尝试了几种不同的方法来解决这个问题:
- 从位于 R 包中的
configure脚本中导出修改后的 LD_LIBRARY_PATH。 - 在同一
configure脚本中创建指向共享库的软链接。
两者都没有工作,在我看来,一旦 R 启动,就有一个变量存储 LD_LIBRARY_PATH 的结果。也许解决方案是编辑该变量。
【问题讨论】:
-
从
R内部调用Sys.setenv(LD_LIBRARY_PATH="/path/to/blah")将改变任何未来子进程的环境,但不会改变R本身的环境(可以通过ps e看到)。不过,this post 似乎表明它有所作为,所以你可以试一试。 -
.. 或者
Sys.setenv(LD_LIBRARY_PATH=paste("/path/to/blah", Sys.getenv("LD_LIBRARY_PATH"),sep=":")),以免破坏现有路径 -
设置环境变量有效!但是,库的加载不起作用...
-
编写 R 扩展的guide 说:在 Unix 上,用于解析动态链接的依赖库的路径在进程启动时是固定的(出于安全原因)(... )。恐怕这意味着您的问题无法解决:任何解决方案都将被视为安全风险......
-
我一定会读到的,但是我尝试了 dyn.load(path_to_library) 并且成功了!在您看来,您对此有何看法?会不会有安全风险?
标签: r unix linker-flags