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?
解决方案
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.