LD_LIBRARY_PATH .

本文介绍如何解决Linux环境下动态链接库加载失败的问题。通过设置环境变量LD_LIBRARY_PATH,确保程序能正确找到所需的动态链接库。文章还提供了将设置永久化的步骤。

转载来的

在 LINUX下,如果你写好了自己的动态链接库,需要在其它程序里调用,则需要让这些程序能找到这些动态链接库。如果设置不对,会出现类似如下的错误:

test: error while loading shared libraries: libexampleso.so.0: cannot open shared object file: No such file or directory

这是因为没有把动态链接库的安装路径(例如说是 /usr/local/lib )放到变量 LD_LIBRARY_PATH 里。

这时,可以用命令 export 来临时测试确认是不是这个问题:

export LD_LIBRARY_PATH=/usr/local/lib

在终端里运行上面这行命令,再运行这个可执行文件,如果运行正常就说明是这个问题。

接下来的问题是:以上做法,只是临时设置变量 LD_LIBRARY_PATH ,下次开机,一切设置将不复存在;如何把这个值持续写到 LD_LIBRARY_PATH 里呢?

我们可以在~/.bashrc 或者~/.bash_profile 中加入 export 语句,前者在每次登陆和每次打开 shell 都读取一次,后者只在登陆时读取一次。我的习惯是加到 ~/.bashrc 中,在该文件的未尾,可采用如下语句来使设置生效:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

修改完后,记得关掉当前终端并重新打开一个新的终端,从而使上面的配置生效。


<think>我们正在讨论如何设置LD_LIBRARY_PATH环境变量以包含本地库目录。根据用户的问题,他们希望了解在Linux中如何设置这个环境变量。 首先,需要明确LD_LIBRARY_PATH是一个环境变量,它用于在程序运行时指定除了默认路径之外的其他共享库搜索路径。 设置方法通常有两种:临时设置和永久设置。 1. 临时设置(仅在当前终端会话中有效): 在终端中直接使用export命令: ```bash export LD_LIBRARY_PATH=/path/to/your/libs:$LD_LIBRARY_PATH ``` 这里,我们将目标路径添加到现有的LD_LIBRARY_PATH之前(使用冒号分隔),这样系统会先搜索我们指定的目录。 2. 永久设置(使其在每次登录时都有效): 可以将上述export命令添加到用户的shell配置文件中,例如: - 对于bash:~/.bashrc 或 ~/.bash_profile - 对于zsh:~/.zshrc 例如,在.bashrc文件中添加: ```bash export LD_LIBRARY_PATH="/path/to/your/libs:$LD_LIBRARY_PATH" ``` 然后运行`source ~/.bashrc`使其立即生效。 但是,需要注意的是,使用LD_LIBRARY_PATH有一些缺点,比如可能会覆盖系统库,或者导致链接时出现意想不到的行为(如引用[1]所提到的)。因此,建议谨慎使用,尤其是在生产环境中。 另外,引用[3]提到了在CMakeLists.txt中使用TARGET_LINK_LIBRARIES来链接库,这是一种在构建时指定库路径的方法,而不是依赖于运行时的环境变量。这可能是更健壮的方法。 所以,我们可以根据用户的需求,提供两种方法:一种是设置环境变量,另一种是在构建时指定库路径。 最后,生成相关问题: 1. 设置LD_LIBRARY_PATH有什么潜在问题? 2. 除了LD_LIBRARY_PATH,还有哪些方法可以让程序找到共享库? 3. 如何在CMake中指定库的搜索路径?</think>### 如何在Linux中设置LD_LIBRARY_PATH包含本地库目录 #### 方法1:临时设置(当前终端会话有效) ```bash export LD_LIBRARY_PATH=/path/to/local/libs:$LD_LIBRARY_PATH ``` - 将`/path/to/local/libs`替换为你的实际目录路径 - 使用冒号`:`分隔多个路径,例如: ```bash export LD_LIBRARY_PATH=/opt/mylibs:/home/user/libs:$LD_LIBRARY_PATH ``` #### 方法2:永久设置(用户级) 1. 编辑用户配置文件(如`~/.bashrc`或`~/.bash_profile`): ```bash nano ~/.bashrc ``` 2. 在文件末尾添加: ```bash export LD_LIBRARY_PATH="/path/to/local/libs:$LD_LIBRARY_PATH" ``` 3. 使配置生效: ```bash source ~/.bashrc ``` #### 方法3:永久设置(系统级) 1. 创建配置文件(需要root权限): ```bash sudo nano /etc/ld.so.conf.d/local_libs.conf ``` 2. 添加库目录路径: ```bash /path/to/local/libs ``` 3. 更新库缓存: ```bash sudo ldconfig ``` #### 验证设置 ```bash echo $LD_LIBRARY_PATH # 查看当前设置 ldd /path/to/your/program # 检查程序加载的库路径 ``` #### 注意事项 1. **路径优先级**:LD_LIBRARY_PATH中的路径会**优先于**系统默认路径(如`/usr/lib`)被搜索 2. **安全风险**:可能被恶意软件利用加载篡改的库,生产环境慎用[^1] 3. **替代方案**: - 编译时指定`-rpath`链接选项 - 使用CMake的`TARGET_LINK_DIRECTORIES`(如引用[3]所示) - 修改`/etc/ld.so.conf.d/`配置文件(推荐系统级部署) > **重要提示**:LD_LIBRARY_PATH会影响链接器(ld)的行为,可能导致意外的库链接[^1]。在开发环境建议优先使用编译时链接选项(如`-L/path/to/libs -lmylib`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值