这是一个双管齐下的问题...问题的背景是获得一个好的 Python 3.1.1 版本,用于构建和运行 mod_wsgi。请参阅这个文件有关共享库为何是个好主意的更多信息。
使用 --enable-shared 构建 Python 会产生什么后果?
我观察到,当我不使用 --enable-shared 构建它时,python 二进制文件约为 16MB
-rwxr-xr-x 2 root root 1638104 Aug 17 12:29 python3.1
使用--enable-shared后,python二进制文件为15K。
-rwxr-xr-x 2 root root 15860 Oct 5 22:34 python3.1
总的来说,这对 Python 的“正常”操作有什么影响?所有脚本是否仍会以相同的方式运行?对性能有影响吗?您是否可以(或者是否可取)同时拥有两者(共享和静态)?
关于如何彻底解决此错误有什么想法吗?
注意:建立在干净的 RHEL 5.3 64 位安装上。
使用 构建 Python 3.1.1 后./configure --enable-shared
,我收到此错误:
[root@test ~]# python3
python3: error while loading shared libraries:
libpython3.1.so.1.0: cannot open shared object file: No such file or directory
我通过放置这个符号链接解决了这个问题:
/usr/lib64/libpython3.1.so.1.0 -> /usr/local/lib/libpython3.1.so.1.0
这看起来相当黑客...是否有可以传递的 ./configure 选项来解决这个问题?
--
谢谢!
答案1
这可能是 superuser.com 的一个,但是好吧,我会接受。
使用 --enable-shared 构建 Python 会产生什么后果?
您获得一个使用动态加载器链接所需库的二进制文件,这没什么问题。当您的二进制文件所依赖的任何库更新时,下一次调用该二进制文件会受益,而不是下一次构建。
一般来说,这对 python 的“正常”操作有什么影响?
没有什么。
所有脚本还会以相同的方式运行吗?
是的。
有性能影响吗?
如果您唯一关心的是快速生成 Python 进程,那么静态链接会更快一些。
您是否可以,或者是否希望,同时拥有两者(共享和静态)?
当然可以,但是动态二进制文件就可以了,不需要任何静态二进制文件,除非你知道你需要它。
关于如何彻底解决此错误有什么想法吗?
编辑 /etc/ld.so.conf,在一行上添加“/usr/local/lib”,运行 ldconfig
是否有可以传递的 ./configure 选项来解决这个问题?
只是猜测...--prefix=/usr
答案2
我在 Fedora 64 位系统上遇到了这个问题,虽然没有找到答案,但至少找到了一个解释:
这个 Python 错误自 2003 年起就已存在,并且仍然适用于 3.1:有一个--libdir
标志configure
应该能够设置库目录,但实际上它什么都不做;Python 库将始终安装在“ PREFIX/lib
”中。这个错误让一些开发人员对这种情况的原因(暂时)发表了看法。因此,对于 Fedora,我运行:
./configure --enable-shared --prefix=/usr
我不得不跑
ln -s /usr/lib/libpython3.1.so.1.0 /usr/lib64/libpython3.1.so.1.0
安装后才能运行。所以,是的,这有点像黑客行为,但这是 Python 构建目前的工作方式。
答案3
对于任何回到这个问题的人来说,这是正确的解决方案:
编辑 /etc/ld.so.conf 或在 /etc/ld.so.conf.d/ 中创建一些内容以添加 /usr/local/lib 和 /usr/local/lib64。然后运行 ldconfig。