我有一些使用某些共享库的代码(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/"
最佳答案
采用
export LD_LIBRARY_PATH="/path/to/library/"
否则,它将仅可用于bash,而不能用于您启动的任何程序。
链接时尝试
-R/path/to/library/
标志,它将使程序在该目录中查找,并且您无需设置任何环境变量。编辑:看来
-R
仅是Solaris,并且您在Linux上。另一种方法是将路径添加到
/etc/ld.so.conf
并运行ldconfig
。请注意,这是全局更改,将应用于所有动态链接的二进制文件。关于c - 为什么每次运行应用程序时都必须使用导出定义LD_LIBRARY_PATH?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/695530/