New submission from Max Cantor:
On certain Linux distributions such as Ubuntu, the linker is invoked by default
with --as-needed, which has an undesireable side effect when linking static
libraries: it is bad at detecting required symbols, and the order of libraries
on the command line become significant.
Right now, on my Ubuntu 12.10 system with a custom 32-bit version of Python, I
get the following command output:
mcantor@hpmongo:~$ /opt/pym32/bin/python-config --ldflags
-L/opt/pym32/lib/python2.7/config -lpthread -ldl -lutil -lm -lpython2.7
-Xlinker -export-dynamic
When linking a project with those flags, I get the following error:
/usr/bin/ld: /opt/pym32/lib/python2.7/config/libpython2.7.a(dynload_shlib.o):
undefined reference to symbol 'dlopen@@GLIBC_2.1'
/usr/bin/ld: note: 'dlopen@@GLIBC_2.1' is defined in DSO
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../i386-linux-gnu/libdl.so so try
adding it to the linker command line
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../i386-linux-gnu/libdl.so: could not
read symbols: Invalid operation
collect2: error: ld returned 1 exit status
To resolve the error, I moved -ldl and -lutil *AFTER* -lpython2.7, so the
relevant chunk of my gcc command line looked like this:
-L/opt/pym32/lib/python2.7/config -lpthread -lm -lpython2.7 -ldl -lutil
-Xlinker -export-dynamic
I have no idea why --as-needed has such an unpleasant side effect when static
libraries are being used, and it's arguable from my perspective that this
behavior is the real bug. However it's equally likely that there's a good
reason for that behavior, like it causes a slowdown during leap-years on Apple
IIs or something. So here I am. python-config ought to respect the quirks of
--as-needed when outputting its ldflags.
--
components: Build, Cross-Build
messages: 187121
nosy: Max.Cantor
priority: normal
severity: normal
status: open
title: python-config --ldflags gives broken output when statically linking
Python with --as-needed
type: behavior
versions: Python 2.7
___
Python tracker
<http://bugs.python.org/issue17769>
___
___
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com