ldconfig几个需要注意的地方

本文详细阐述了在Linux系统中往/lib和/usr/lib目录外添加动态链接库的方法及注意事项,包括修改/etc/ld.so.conf文件、使用ldconfig命令、通过全局变量LD_LIBRARY_PATH临时指定搜索路径等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到
2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到
比如安装了一个mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的library才能在程序运行时被找到。
3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。
4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。
5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。


FROM:

http://www.cppblog.com/true/archive/2012/05/29/20667.html

<think>好的,用户现在需要详细解释之前给出的在CentOS服务器上手动编译安装Python 3.7.2的一系列命令和步骤。用户之前可能已经按照这些步骤操作过,但遇到了问题,或者想更深入理解每个步骤的作用。我需要确保解释清晰,帮助用户理解每个命令的目的,以及可能需要注意地方。 首先,用户提供的步骤分为几个部分:安装开发工具和依赖库、下载和解压Python源码、修改配置文件、配置和编译安装、设置环境变量。我需要逐一解释这些步骤,说明每个命令的作用,以及为什么要这么做。 用户可能在手动编译安装Python时遇到问题,比如依赖缺失、配置错误或者环境变量设置不正确。因此,解释需要覆盖每个步骤的必要性,例如安装开发工具组是为了获取编译器和其他构建工具,安装各种*-devel包是为了支持Python的某些功能模块,比如zlib用于压缩,openssl用于SSL/TLS支持,sqlite3的数据库支持等。 接下来,修改Modules/Setup.dist文件是为了启用某些模块的编译,比如readline和ssl。这里需要解释修改该文件的目的,以及如果不修改可能导致的问题。例如,readline模块支持交互式命令行编辑,而ssl模块对于使用HTTPS等安全连接非常重要。用户可能在后续使用Python时遇到模块缺失的问题,所以这个步骤很关键。 配置步骤中的--enable-shared选项是为了生成共享库,这样其他程序可以链接到Python的动态库。需要说明这个选项的作用,以及可能带来的影响,比如需要设置LD_LIBRARY_PATH来让系统找到共享库。 编译和安装步骤中的make命令参数,如-j 2,是为了并行编译以加快速度,这里需要提醒用户根据实际CPU核心数调整。安装时使用make install会将Python安装到系统默认路径,但用户可能需要注意是否覆盖了系统自带的Python版本,不过用户使用的是make altinstall吗?这里用户使用的是make install,这可能会覆盖现有的python3链接,可能需要提醒用户潜在的问题。 环境变量的设置部分,用户通过/etc/profile.d/python3_lib.sh和/etc/ld.so.conf.d/python3.conf来添加库路径,并运行ldconfig更新缓存。需要解释LD_LIBRARY_PATHldconfig的作用,以及为什么需要这些步骤来确保Python的共享库被正确找到。 可能用户的问题还包括:为什么需要手动编译安装而不是使用yum?可能用户需要特定版本的Python,而系统仓库中没有。或者用户希望自定义编译选项以获得更好的性能或特定的功能支持。需要指出手动安装的优缺点,比如更灵活但维护起来更复杂。 另外,用户可能在执行这些步骤时遇到权限问题,因为大部分命令都使用了sudo,需要提醒用户注意权限管理,避免不必要的系统修改。 最后,验证安装是否成功,检查Python版本和模块是否正常导入,比如ssl模块。如果用户遇到共享库找不到的问题,需要检查环境变量是否正确设置,或者重新运行ldconfig。 总结来说,我需要将用户的步骤分解,逐一解释每个命令的作用,指出关键配置和可能的问题点,帮助用户理解整个流程,并在必要时给出建议或注意事项。</think>以下是您提供的命令和配置的详细解释: --- ### **步骤分解与作用说明** --- #### **1. 安装编译工具和依赖库** ```bash sudo yum -y groupinstall "Development Tools" # 安装GCC、make等编译工具链 sudo yum install zlib-devel bzip2-devel openssl-devel sqlite-devel readline-devel libffi-devel # 安装Python依赖的系统库 ``` - **作用**: - `Development Tools` 包含 `gcc`、`make`、`autoconf` 等编译工具,用于后续源码编译。 - `zlib-devel` 等库是Python关键功能(如压缩、SSL、数据库支持)的依赖。例如: - `openssl-devel`:支持HTTPS请求和SSL/TLS加密。 - `sqlite-devel`:启用Python内置的SQLite3数据库模块。 - `readline-devel`:提供交互式命令行编辑功能(如上下键历史记录)。 --- #### **2. 下载并解压Python源码** ```bash wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz sudo tar xf Python-3.7.2.tgz -C /opt/ # 解压到/opt目录(需sudo权限) cd /opt/Python-3.7.2/ # 进入源码目录 ``` - **作用**: - 将Python 3.7.2源码下载到服务器,并解压到系统级目录 `/opt`(通常用于存放第三方件)。 --- #### **3. 修改编译配置(关键步骤)** ```bash sudo vim Modules/Setup.dist # 编辑配置文件 ``` - **修改内容**: ```plaintext # 取消注释以下行以启用readline支持 readline readline.c -lreadline -ltermcap # 添加SSL路径配置(需确保openssl-devel已安装) SSL=/usr/local/ssl _ssl _ssl.c \ -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ -L$(SSL)/lib -lssl -lcrypto ``` - **作用**: - 启用 `readline` 模块:使Python交互式命令行支持历史记录和编辑功能。 - 配置SSL路径:确保Python能正确编译`_ssl`模块(用于`pip`安装包时的HTTPS连接)。 --- #### **4. 配置、编译与安装** ```bash sudo ./configure --enable-shared # 生成Makefile,启用共享库 sudo make -j 2 # 并行编译(2个CPU核心加速) sudo make install # 安装到系统目录(默认/usr/local) ``` - **关键参数**: - `--enable-shared`:生成动态链接库(`.so` 文件),使其他程序可调用Python库。 - `-j 2`:指定并行编译线程数(根据CPU核心数调整,加快编译速度)。 - **注意**: - `make install` 会将Python安装到 `/usr/local/bin`,可能覆盖系统原有Python 3(若存在)。若需保留系统Python,可改用 `make altinstall`。 --- #### **5. 配置动态链接库路径** ```bash # 添加环境变量 sudo vim /etc/profile.d/python3_lib.sh export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib # 更新系统库缓存 sudo vim /etc/ld.so.conf.d/python3.conf /usr/local/lib sudo ldconfig # 立即生效 source /etc/profile # 加载环境变量 ``` - **作用**: - `LD_LIBRARY_PATH`:告知系统在运行时搜索共享库的路径(因 `--enable-shared` 生成的库位于 `/usr/local/lib`)。 - `ld.so.conf.d/python3.conf`:永久添加库路径到系统配置。 - `ldconfig`:更新共享库缓存,使系统识别新安装的库。 --- ### **常见问题与验证** #### **1. 验证安装是否成功** ```bash python3 --version # 应输出 Python 3.7.2 ls /usr/local/lib/libpython3.7* # 检查是否生成共享库(如libpython3.7m.so.1.0) ``` #### **2. 检查关键模块是否启用** ```python # 进入Python交互环境测试 python3 >>> import ssl # 检查SSL模块 >>> import sqlite3 # 检查SQLite支持 >>> import readline # 检查命令行编辑功能 ``` #### **3. 共享库未找到的解决方法** 若出现类似 `libpython3.7m.so.1.0: cannot open shared object file` 错误: - 确认 `/etc/ld.so.conf.d/python3.conf` 包含 `/usr/local/lib`。 - 执行 `sudo ldconfig` 并重新登录终端。 --- ### **总结** 您通过手动编译安装了Python 3.7.2,并配置了共享库和依赖模块。这种方式的**优点**是能灵活控制版本和功能,**缺点**是需自行处理依赖和更新。后续建议: - 使用虚拟环境(`venv`)隔离项目依赖。 - 若需其他版本,可参考相同流程调整源码版本号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值