Sun 13 Jul 2014 11:28:25 AM UTC, comment #2:
> That change was to avoid conflicting library versions
> being linked into base and gui ...
I see. The way to address this problem is to take care to relink all reverse dependencies of the library. Which I agreee is a bit tedious and even error prone if you install everything manually.
> I don't really know/understand the benefits of explicitly
> specifying the libraries
There is no benefit at all. If program foo links dynamically with libA which dynamically links with libB, there is no good reason for foo to link with libB (unless the dynamic linker is not capable of loading the DSOs in which case the last resort would be static linking). Imagine if libB is being linked with libC and libD, and libD is linked with libE... Shared libraries are ubiquitous nowadays so a system would easily become unmaintainable mess if one does that. For this reason, almost all binary-based distros delete libtool .la files or at least empty their dependency_libs field. The GNUstep core libraries have been doing a great job on this front by keeping their external library dependencies unexposed.
|
Sun 13 Jul 2014 07:28:32 AM UTC, comment #1:
That change was to avoid conflicting library versions being linked into base and gui ... but I guess easing building in a sandbox for packaging is more important.
Beyond that, I don't really know/understand the benefits of explicitly specifying the libraries, so I'll trust your opinion ... at least until/unless others complain.
Thanks.
|
Sun 25 May 2014 10:38:46 PM UTC, original submission:
This change
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/base.make.in?r1=37409&r2=37408&pathrev=37409
is clearly wrong. You don't really want everything that uses Base to be linked with ICU, Avahi, GnuTLS, libxslt, libffi, etc. I don't really understand the rationale for removing the make conditional -- if GUI needs ICU (as it does), it needs to check for ICU itself (as it does). There's no need for Base to impose the libraries it uses to other packages. Furthermore, literally everything fails to build if built in a chroot or with special linker flags, for example Cynthiune:
gcc -shared -rdynamic -Wl,-z,relro -Wl,-z,defs -Wl,--as-needed -Wl,-rpath,/usr/lib/cynthiune.app -pthread -shared-libgcc -fexceptions -o ./MP3.format/./MP3 ./obj/MP3.obj/xing.c.o ./obj/MP3.obj/MP3.m.o -L/usr/local/lib -L/usr/lib -Wl,-z,relro -Wl,-z,defs -Wl,--as-needed -L/usr/local/lib -L/usr/local/lib -L/usr/lib -L/usr/lib/x86_64-linux-gnu -lmad -lid3tag -lz -L../../Frameworks/Cynthiune/Cynthiune.framework/Versions/Current -lCynthiune -lgnustep-gui -lgnustep-base -lobjc -lavahi-common -lavahi-client -lgnutls -lgcrypt -lxslt -lxml2 -lffi -lrt -ldl -lpthread -lz -licui18n -licuuc -licudata -lm
/usr/bin/ld: cannot find -lavahi-common
/usr/bin/ld: cannot find -lavahi-client
/usr/bin/ld: cannot find -lxslt
/usr/bin/ld: cannot find -lffi
collect2: error: ld returned 1 exit status
/usr/share/GNUstep/Makefiles/Instance/bundle.make:205: recipe for target 'MP3.format/./MP3' failed
|