
On Tue, Aug 13, 2013 at 02:23:41PM +0200, Guido Günther wrote:
On Tue, Aug 13, 2013 at 09:51:22AM +0100, Daniel P. Berrange wrote:
On Mon, Aug 12, 2013 at 10:13:07PM +0200, Guido Günther wrote:
On Mon, Aug 12, 2013 at 01:21:08PM -0600, Eric Blake wrote:
On 08/12/2013 01:14 PM, Guido Günther wrote:
otherwise we fail like:
CCLD virdbustest /usr/bin/ld: virdbustest-virdbustest.o: undefined reference to symbol 'dbus_message_unref' /lib/x86_64-linux-gnu/libdbus-1.so.3: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status
Found by:
http://honk.sigxcpu.org:8001/job/libvirt-build-debian-sid-amd64/7/console --- tests/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
ACK.
I found several more places which fail to link with a strict --no-copy-dt-needed-entries. See my followup patch which superseeds this one.
Hmm, it sounds like we ought to make configure.ac automatically add this linker flag if we can detect that it is supported.
Does this make sense:
Subject: [PATCH] Check for --no-copy-dt-needed linker flag
and use it when available --- configure.ac | 1 + m4/virt-linker-relro.m4 | 11 +++++++++++ src/Makefile.am | 9 +++++++++ tests/Makefile.am | 1 + 4 files changed, 22 insertions(+)
diff --git a/configure.ac b/configure.ac index ac8cfa1..2084437 100644 --- a/configure.ac +++ b/configure.ac @@ -160,6 +160,7 @@ AC_MSG_RESULT([$VERSION_SCRIPT_FLAGS]) LIBVIRT_COMPILE_WARNINGS LIBVIRT_COMPILE_PIE LIBVIRT_LINKER_RELRO +LIBVIRT_LINKER_NO_COPY_DT_NEEDED_ENTRIES
LIBVIRT_CHECK_APPARMOR LIBVIRT_CHECK_ATTR diff --git a/m4/virt-linker-relro.m4 b/m4/virt-linker-relro.m4 index 9bca90e..57b3d03 100644 --- a/m4/virt-linker-relro.m4 +++ b/m4/virt-linker-relro.m4 @@ -30,3 +30,14 @@ AC_DEFUN([LIBVIRT_LINKER_RELRO],[
AC_MSG_RESULT([$RELRO_LDFLAGS]) ]) + +AC_DEFUN([LIBVIRT_LINKER_NO_COPY_DT_NEEDED_ENTRIES],[ + AC_MSG_CHECKING([for how to avoid indirect lib deps]) + + NO_COPY_DT_NEEDED_ENTRIES_LDFLAGS= + `$LD --help 2>&1 | grep -- "--no-copy-dt-needed-entries" >/dev/null` && \ + NO_COPY_DT_NEEDED_ENTRIES_LDFLAGS="-Wl,--no-copy-dt-needed-entries" + AC_SUBST([NO_COPY_DT_NEEDED_ENTRIES_LDFLAGS]) + + AC_MSG_RESULT([$NO_COPY_DT_NEEDED_ENTRIES_LDFLAGS]) +])
This doesn't belong in this file. Create a new virt-linker-no-indirect.m4 file for it. The variable / macro names are rather too long too - use something like NO_INDIRECT_LDFLAGS / LIBVIRT_LINKER_NO_INDIRECT respectively. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|