[so]实现Linux 程序使用指定的 .so 库,而不是系统的库

要让 Linux 程序使用指定的 `.so` 库而不是系统的库,你可以通过以下几种方法实现:

### 1. 使用 `LD_LIBRARY_PATH` 环境变量
`LD_LIBRARY_PATH` 是一个环境变量,用于在运行时指定动态链接器搜索共享库的路径。你可以在运行程序之前设置这个环境变量,以包含你的自定义库的路径。

**临时设置(仅对当前终端会话有效):**
```bash

export LD_LIBRARY_PATH=$PWD/../lib:$LD_LIBRARY_PATH ;
./openssl

```

**永久设置(对所有新的终端会话有效):**
在 `~/.bashrc` 或 `~/.bash_profile` 文件中添加上述 `export` 命令,然后运行 `source ~/.bashrc` 或 `source ~/.bash_profile` 来使更改生效。

这种方法的优点是不需要修改程序本身或系统的库配置。

### 2. 使用 `patchelf` 工具
`patchelf` 是一个可以用来修改 ELF 二进制文件的工具,包括更改 `.so` 文件的 `RPATH` 或 `RUNPATH`。

**更改 `.so` 文件的 `RPATH`:**
```bash

patchelf --set-rpath $PWD/../lib openssl

```

这会更改程序的 `RPATH`,使得它在运行时会从指定的路径加载 `.so` 文件。

### 3. 使用 `chrpath` 工具
`chrpath` 工具可以用来更改 ELF 二进制文件的 `RPATH` 或 `RUNPATH`,但与 `patchelf` 不同的是,它不能添加新的路径,只能修改现有的路径。

**示例:**
```bash

chrpath -r $PWD/../lib openssl 

```

### 4. 修改系统库路径
对于所有用户和所有程序,你可以在 `/etc/ld.so.conf`(Debian 系统)或 `/etc/ld.so.conf.d/`(Red Hat 系统)中添加你的库路径,然后运行 `sudo ldconfig` 来更新链接器的缓存。

**Debian/Ubuntu 系统:**
创建一个新的配置文件在 `/etc/ld.so.conf.d/`:
```bash

echo "/path/to/your/custom/libs" | sudo tee /etc/ld.so.conf.d/custom-libs.conf
sudo ldconfig

```

**Red Hat 系统:**
编辑 `/etc/ld.so.conf` 并在文件末尾添加你的库路径,然后运行 `ldconfig`:
```bash

echo "/path/to/your/custom/libs" | sudo tee -a /etc/ld.so.conf
sudo ldconfig

```

这些方法可以帮助你将程序使用的 `.so` 库从系统库更改为指定的库。选择最适合你需求的方法。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值