【问题标题】:How to ignore local python when building python from source从源代码构建python时如何忽略本地python
【发布时间】:2013-06-03 22:17:43
【问题描述】:

当我尝试使用以下方法构建自己的 Python 版本时:

./configure --enable-shared --prefix=/app/vendor/python-dev && make && make install

我在安装过程中看到一些错误:

/usr/bin/ld: /usr/local/lib/libpython2.7.a(abstract.o): 重定位 R_X86_64_32 对 `.rodata.str1.8' 制作时不能使用 共享对象;使用 -fPIC /usr/local/lib/libpython2.7.a 重新编译: 无法读取符号:错误值

当链接器尝试使用/usr/local/lib/libpython2.7.a 而不是新编译的库时,问题就开始了。

如何防止链接器(配置/制作)使用系统上安装的 python 库?

【问题讨论】:

  • ./configure --enable-shared --prefix=/app/vendor/python-dev && make && make install 为我工作(来自 Ubuntu 13.04 上的 Python-2.7.5 tarball)。如果错误发生在make 部分,则必须包含make 的完整输出。
  • 这是唯一的错误。它也只是对其他模块重复。我正在使用 2.7.4 压缩包。但我的机器上有 2.7.4,静态编译(我猜没有 -fPIC)。
  • 当然,但是错误的原因会在构建的早期发生,因此如果没有更多信息就无法诊断。看看this,以及后续。我不确定这是否是同一个问题,但如果没有看到 make 的输出,我将无能为力。
  • 这里是日志pastebin.com/ZBUp2cnd。是的,这篇文章提到了同样的问题。但没有解决方案。
  • 我的解决方案是否有效?

标签: python configure


【解决方案1】:

这似乎是setup.py 脚本的错误功能,当make 构建目标sharedmods 时,总是在搜索路径中包含/usr/local

您必须手动发送setup.py,所以...

./configure --enable-shared --prefix=/app/vendor/python-dev

...首先,然后编辑setup.py,找到应如下所示的第 442、443 和 444 行...

if not cross_compiling:
    add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
    add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')

...并将它们注释掉,使它们看起来像这样...

# if not cross_compiling
    # add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
    # add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')

...那么make 应该可以工作。

【讨论】:

  • if 语句也需要注释掉。否则解析器将期待一个缩进块,即两个 add_dir_to_list 行。仅供参考。
  • 我刚刚在尝试重新编译并将 python 重新安装到 /usr/local/lib 时遇到了这个问题。在这种情况下,您必须再次使用 --prefix=/usr/local/lib 并编辑 setup.py,因为这个答案表明无济于事。为了修复它,我不得不删除现有的 /usr/local/lib/libpython2.7.a 文件和 /usr/local/lib/python2.7/ 目录(可能不需要后者)
【解决方案2】:

我用this script解决了:

# Python 2.7.6: 
wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tar xf Python-2.7.6.tar.xz
cd Python-2.7.6
./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared       LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall

【讨论】:

    【解决方案3】:

    我刚刚将 /usr/local/lib/libpython2.7.a 移动到 /tmp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2023-03-25
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      相关资源
      最近更新 更多