这是一个双pipe齐下的问题…问题的上下文是获得一个很好的Python 3.1.1版本,用于构build和运行mod_wsgi。 有关共享库为什么是个好主意的更多信息,请参阅此文档 。
使用–enable-shared构buildPython有什么影响?
我观察到,当我build立它没有 – 共享,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的“正常”操作有什么作用? 所有的脚本仍然运行相同吗? 任何性能影响? 你可以,还是可取的,有(共享和静态)?
任何想法如何解决这个错误干净?
注意:build立在干净的RHEL 5.3 64位安装上。
在使用./configure --enable-shared构buildPython 3.1.1后,出现以下错误:
[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
这似乎很hackish …是否有./configure选项,可以通过治愈这个?
–
谢谢!
这可能是一个超级用户,但好吧,我会咬。
使用–enable-shared构buildPython的后果是什么?
你得到一个二进制文件,它使用dynamic加载器来链接它所需要的库,没有什么错。 当你的二进制文件所依赖的任何库被更新时,下一次调用这个二进制文件会比下一次编译有好处。
一般来说,这对Python的“正常”操作有什么作用?
没有。
所有的脚本仍然运行相同吗?
是。
任何性能影响?
如果快速产生python进程是你唯一的担心,静态链接速度会更快一些。
你可以,还是可取的,有(共享和静态)?
当然你可以,但是一个dynamic的二进制文件很好,除非你知道你需要它,否则不需要任何静态的二进制文件。
任何想法如何解决这个错误干净?
编辑/etc/ld.so.conf,在自己的行上添加“/ usr / local / lib”,运行ldconfig
是否有./configure选项,可以通过治愈这个?
只是猜测… –prefix = / usr
我自己在一个Fedora 64位系统上遇到了这个问题,并且find了一个不太多的答案,但是至less给我一个解释:
这个Python bug自从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构build暂时工作的方式。
对于任何人回来这个,这是正确的解决scheme:
编辑/etc/ld.so.conf或在/etc/ld.so.conf.d/中添加/ usr / local / lib和/ usr / local / lib64。 然后运行ldconfig。