Upon doing a mock build of yelp-2.28.1-2.fc13 with the new version of binutils
(containing the proposed DSO link changes to ld) from
http://roland.fedorapeople.org/ld-test/, the build fails.
/usr/bin/ld.bfd: /usr/lib/xulrunner-sdk-1.9.2/lib/libxpcomglue.a(nsGlueLinkingDlopen.o): undefined reference to symbol 'dlopen@@GLIBC_2.1'
/usr/bin/ld.bfd: note: 'dlopen@@GLIBC_2.1' is defined in DSO /usr/lib/gcc/i686-redhat-linux/4.4.3/../../../libdl.so so try adding it to the linker command line
In the linker line we can see "-ldl -lxpcomeglue" present. -lxpcomglue uses
symbols from -ldl, while yelp does not. Since -lxpcomglue is a static library,
the -ldl was added to satisfy this.
The problem is with the order in which libraries are declared. Since -ldl is
declared before -lxpcomglue in the link line, and since nothing in yelp uses
symbols from -ldl, it is dropped at that point leaving -lxpcomglue with undefined
symbols from -ldl.
The following potential solutions were proposed by Roland McGrath to this issue :
Rearranging the link line would fix this ("-lxpcomglue -ldl"), or
xulrunner-devel could add a libxpcomglue.so linker script containing :
AS_NEEDED ( libxpcomglue.a -ldl )
This way any package using -lxpcomglue would not need to know whether
it is a shared/static library, and what other libraries it makes use of.
devel mailing list