On Wed, Oct 09, 2013 at 09:00:15PM +0100, David Laight wrote: > On Sun, Oct 06, 2013 at 10:40:24AM +0200, Thomas Klausner wrote: > > On Sun, Oct 06, 2013 at 05:28:03AM +0200, Joerg Sonnenberger wrote: > > > On Sat, Oct 05, 2013 at 07:30:14PM +0200, Rhialto wrote: > > > > On Fri 04 Oct 2013 at 18:51:26 +0000, Christos Zoulas wrote: > > > > > Does adding: --no-copy-dt-needed-entries to the link line fix the > > > > > problem > > > > > for you? Perhaps we should consider making this the default again... > > > > > > > > > > http://sourceware.org/ml/binutils/2011-08/msg00131.html > > > > > > > > I think the new way is cleaner. It is better to have dependencies > > > > explictly stated. > > > > > > No, it is broken. It has been discussed before. > > > > Can you please summarize the arguments, or include concrete links to > > the "before"? > > 1) I have library containing a lot of functions and I decide to split it > into several parts. The user callable functions end up separated but > I don't want to make the split (or the presence of the other libraries) > visible to users. > It might be that the install copies/symlinks the library optimised > for the current cpu. > > 2) I write a library with an alternate implementation of one of the functions > in a standard library with a DT_NEEDED entry for the renamed standard > library. > Having moved all the files I still want to be able to compile programs. > > Note that since the run-time linker makes all the symbols available > you can't have multiple copies of the same library loaded anyway. > > The really oughgt to have added a new variant of DT_NEEDED that indicated > that the symbols should not be made visible.
Thanks for the explanation. So how do we proceed? How should we fix pkgsrc packages that don't currently build, like: mail/akonadi: Linking CXX executable ../bin/akonadi_agent_launcher ld: /scratch/mail/akonadi/work/.buildlink/qt4/lib/libQtCore.so: undefined reference to symbol 'pthread_cancel' ld: note: 'pthread_cancel' is defined in DSO /usr/lib/libpthread.so.1 so try adding it to the linker command line /usr/lib/libpthread.so.1: could not read symbols: Invalid operation audio/lame: /bin/sh ../libtool --tag=CC --mode=link gcc -Wall -pipe -O2 -I/usr/include -L/usr/lib -Wl,-R/usr/lib -Wl,-R/usr/pkg/lib -static -o lame lame_main.o main.o brhist.o console.o get_audio.o lametime.o parse.o timestatus.o ../libmp3lame/libmp3lame.la -lcurses -lm libtool: link: gcc -Wall -pipe -O2 -Wl,-R/usr/pkg/lib -o lame lame_main.o main.o brhist.o console.o get_audio.o lametime.o parse.o timestatus.o ../libmp3lame/.libs/libmp3lame.a -L/scratch/audio/lame/work/.buildlink/lib -lcurses -lm ld: console.o: undefined reference to symbol 'tgetstr' ld: note: 'tgetstr' is defined in DSO /usr/lib/libterminfo.so.1 so try adding it to the linker command line /usr/lib/libterminfo.so.1: could not read symbols: Invalid operation sysutils/strigi: ld: CMakeFiles/index2dump.dir/indexdump.cpp.o: undefined reference to symbol '_ZN6lucene4util14atomic_threads16atomic_decrementEPj' ld: note: '_ZN6lucene4util14atomic_threads16atomic_decrementEPj' is defined in DSO /usr/pkg/lib/libclucene-shared.so.1 so try adding it to the linker command line /usr/pkg/lib/libclucene-shared.so.1: could not read symbols: Invalid operation Thomas
