一尘不染

为什么每次运行应用程序时都必须使用导出定义LD_LIBRARY_PATH?

linux

我有一些使用某些共享库的代码(gcc上的c代码)。编译时,我必须使用-I和-L明确定义包含和库目录,因为它们不在标准位置。当我尝试运行代码时,出现以下错误:

./sync_test 
./sync_test: error while loading shared libraries: libsync.so: cannot open shared object file: No such file or directory

但是,请执行以下操作,一切正常:

export LD_LIBRARY_PATH="/path/to/library/"
./sync_test

现在,奇怪的是,这只能工作一次。如果我尝试再次运行sync_test,除非先运行export命令,否则会出现相同的错误。我尝试将以下内容添加到我的.bashrc中,但没有什么区别:

LD_LIBRARY_PATH="/path/to/library/"

阅读 412

收藏
2020-06-02

共1个答案

一尘不染

采用

export LD_LIBRARY_PATH="/path/to/library/"

否则,它将仅对bash可用,而对您启动的任何程序均不可用。

-R/path/to/library/在链接时尝试标记,它将使程序在该目录中显示,并且您无需设置任何环境变量。

编辑:看起来-R只是Solaris,而您在Linux上。

另一种方法是将路径添加到/etc/ld.so.conf并运行ldconfig。请注意,这是全局更改,将应用于所有动态链接的二进制文件。

2020-06-02