问题
When I try to build my own version of Python using:
./configure --enable-shared --prefix=/app/vendor/python-dev && make && make install
I see some errors during installation:
/usr/bin/ld: /usr/local/lib/libpython2.7.a(abstract.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libpython2.7.a: could not read symbols: Bad value
The problem starts when the linker tries to use /usr/local/lib/libpython2.7.a
and not the newly compiled library.
How can I prevent the linker (configure/make) from using the python libraries installed on the system?
回答1:
This looks to be a misfeature of the setup.py
script always including /usr/local
in the search path when make
builds the target sharedmods
.
You'll have to manually frob the setup.py
, so do the...
./configure --enable-shared --prefix=/app/vendor/python-dev
...first, then edit setup.py
, find lines 442, 443, and 444 which should look like this...
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')
...and comment them out so they look like this...
# 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')
...then the make
should work.
回答2:
I solved with 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:
I just moved /usr/local/lib/libpython2.7.a to /tmp
来源:https://stackoverflow.com/questions/16986952/how-to-ignore-local-python-when-building-python-from-source