使用 --enable-shared 编译 Python 3.1.1

使用 --enable-shared 编译 Python 3.1.1

这是一个双管齐下的问题...问题的背景是获得一个好的 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。

相关内容