13

当我尝试使用以下方法构建自己的 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 库?

4

3 回答 3

13

这看起来是构建目标时setup.py始终包含/usr/local在搜索路径中的脚本的错误功能。makesharedmods

您必须手动操作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应该工作。

于 2013-06-07T18:02:44.487 回答
5

我用这个脚本解决了:

# 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
于 2015-05-10T02:17:24.583 回答
0

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

于 2017-11-30T14:17:07.930 回答