[libvirt] [PATCH] compile: fix undefined reference to gnutls_x509_crt_get_dn with gcc-4.6.1

Eric Blake eblake at redhat.com
Tue Oct 18 14:45:38 UTC 2011


On 10/18/2011 02:06 AM, Xu He Jie wrote:
> From: soulxu<soulxu at soulxu-ThinkPad-T410.(none)>
>
> When I compile libvirt with gcc-4.6.1 in ubuntu 11.10, got error as below:
>
>    CCLD   libvirtd
> /usr/bin/ld: ../src/.libs/libvirt_driver_qemu.a(libvirt_driver_qemu_la-qemu_migration.o): undefined reference to symbol 'gnutls_x509_crt_get_dn@@GNUTLS_1_4'
> /usr/bin/ld: note: 'gnutls_x509_crt_get_dn@@GNUTLS_1_4' is defined in DSO /usr/lib/x86_64-linux-gnu/libgnutls.so so try adding it to the linker command line
> /usr/lib/x86_64-linux-gnu/libgnutls.so: could not read symbols: Invalid operation
> collect2: ld returned 1 exit status
> make[3]: *** [libvirtd] Error 1
>
>
> It can compile with gcc-4.5.2 in ubuntu 11.04, but it can not compile with gcc-4.6.1 in ubuntu 11.10.
>
> I didn't find reason. Does Anyone know the reason or the different between gcc-4.5.2 and gcc-4.6.1?

More likely, the difference is not in gcc, but in ld policy - Ubuntu 
recently changed policy to no longer allow implicit link dependencies by 
default (that is, if A links against B, and B links against C, older 
distros allowed A to use symbols from C without explicitly linking 
against C, while newer distros require the explicit link).

>
> I still provide a patch for this. Just make it is working now.
>
> Signed-off-by: soulxu<soulxu at soulxu-ThinkPad-T410.(none)>
> ---
>   src/Makefile.am |    6 +++++-
>   1 files changed, 5 insertions(+), 1 deletions(-)
>
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 87d91ed..104efc6 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -776,10 +776,14 @@ noinst_LTLIBRARIES += libvirt_driver_qemu.la
>   #libvirt_la_BUILT_LIBADD += libvirt_driver_qemu.la
>   endif
>   libvirt_driver_qemu_la_CFLAGS = $(NUMACTL_CFLAGS) \
> +                                $(GNUTLS_CFLAGS) \
> +                                $(LIBXML_CFLAGS) \

I understand the addition of GNUTLS_CFLAGS, but why LIBXML_CFLAGS?  Did 
you get a second link error?

>   		-I at top_srcdir@/src/conf $(AM_CFLAGS)
>   libvirt_driver_qemu_la_LDFLAGS = $(AM_LDFLAGS)
>   libvirt_driver_qemu_la_LIBADD = $(NUMACTL_LIBS) \
> -				$(CAPNG_LIBS)
> +				$(CAPNG_LIBS) \
> +                                $(GNUTLS_LIBS) \
> +                                $(LIBXML_LIBS)

Likewise.

Your approach to a fix is correct, but I need to know whether to use the 
patch as-is or whether we just need one library rather than two.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list