Message173796
Hi,
when trying to build extension modules with distutils I ran into
a problem that linking fails with an errors like:
gcc -pthread -shared -L build/temp.linux-x86_64-2.7/h5py/defs.o -L/reg/g/psdm/sw/external/hdf5/1.8.4p1/x86_64-rhel6-gcc44-opt/lib -L. -Wl,-R/reg/g/psdm/sw/external/hdf5/1.8.4p1/x86_64-rhel6-gcc44-opt/lib -lhdf5 -lpython2.7 -o build/lib.linux-x86_64-2.7/h5py/defs.so
/usr/bin/ld: cannot find -lpython2.7
collect2: ld returned 1 exit status
For some reason location of the python library is not added to the
command line with -L option.
I tracked the reason down to a particular environment that we have,
in out environment python executable found in a $PATH is a symbolic link
to a binary installed in some non-standard location. I believe this
piece of code in build_ext.py fails to realize this:
if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")):
# building third party extensions
self.library_dirs.append(sysconfig.get_config_var('LIBDIR'))
else:
# building python standard extensions
self.library_dirs.append('.')
apparently sys.executable in our case refers to a symlink path, while
sys.exec_prefix refers to actual installation directory.
I think fix for our case should be easy (I can't say about other cases
which may be broken by this logic), one just need to apply os.path.realpath()
to sys.executable before comparing it to sys.exec_prefix.
Andy |
|
Date |
User |
Action |
Args |
2012-10-25 19:44:24 | Andy.Salnikov | set | recipients:
+ Andy.Salnikov, tarek, eric.araujo |
2012-10-25 19:44:24 | Andy.Salnikov | set | messageid: <1351194264.28.0.869819451271.issue16326@psf.upfronthosting.co.za> |
2012-10-25 19:44:24 | Andy.Salnikov | link | issue16326 messages |
2012-10-25 19:44:23 | Andy.Salnikov | create | |
|