[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] undefined symbol _nettle_cast5_set_key
From: |
Programmingkid |
Subject: |
Re: [Qemu-devel] undefined symbol _nettle_cast5_set_key |
Date: |
Tue, 31 May 2016 11:48:45 -0400 |
On May 31, 2016, at 10:51 AM, Daniel P. Berrange wrote:
> On Tue, May 31, 2016 at 10:25:20AM -0400, Programmingkid wrote:
>>
>> On May 31, 2016, at 10:00 AM, Daniel P. Berrange wrote:
>>
>>> On Fri, May 20, 2016 at 04:43:51PM -0600, Eric Blake wrote:
>>>> On 05/20/2016 01:15 PM, Programmingkid wrote:
>>>>> Noticed this bug after a 'git pull'. My repo is at commit
>>>>> 65603e2fc18b48e6e55a3dd693669413141694ec -
>>>>> tci: do not include exec/exec-all.h
>>>>>
>>>>> I am building QEMU on Mac OS 10.6 with GCC 4.9.
>>>>> Here is the full message:
>>>>>
>>>>> LINK qemu-nbd
>>>>> Undefined symbols for architecture x86_64:
>>>>> "_nettle_cast5_set_key", referenced from:
>>>>> _qcrypto_cipher_new in cipher.o
>>>>
>>>> What version of nettle are you compiling against? Obviously it's an
>>>> older version, but is it one that we need to work around at configure
>>>> time, or one that you should just update locally?
>>>
>>> So we already have compatibility code to allow us to build with older
>>> versions of nettle that I've tested right back to nettle 2.4.
>>>
>>> The "cast5_set_key" method is present in the nettle 3.2 version that
>>> Programmingkid has installed. The nettle headers mangle the name
>>> 'cast5_set_key' into 'nettle_cast5_set_key', but I'm not sure where
>>> the extra leading '_' is coming from in either _nettle_cast5_set_key
>>> or _qcrypto_cipher_new. Presumably that is something specific to
>>> Os-X linking.
>>>
>>> So I don't think this is a question of incompatible older versions of
>>> nettle. Rather than is some problem with linking going on here.
>>>
>>>
>>> I'd like to see the output of 'configure' as well as the config.log
>>> and config-host.mak files that it generates when showing this error.
>>>
>>> Also I'd like the output of 'make V=1' so we see the full linker
>>> command line, not just the summary.
>>>
>>> Regards,
>>> Daniel
>>
>> Here is everything you wanted: configure output, config.log,
>> config-host.mak, and make V=1.
>>
>> $ ./configure --cxx=gcc-4.9 --cc=gcc-4.9 --objcc=gcc-4.9 --disable-gtk
>> --disable-sdl --target-list=ppc-softmmu,i386-softmmu
>> ld: unknown option: --verbose
>
>
>> GNUTLS support yes
>> GNUTLS hash yes
>> GNUTLS rnd yes
>> libgcrypt no
>> libgcrypt kdf no
>> nettle yes (3.2)
>> nettle kdf yes
>
> Ok, that shows we've detected your nettle 3.2 install. The
> support for 'kdf' also shows we successfully compiled and
> linked against that. This is shows your 3.2 install of nettle
> is present & correct which is good.
>
>> libtasn1 yes
>> curses support yes
>> virgl support no
>> curl support yes
>> mingw32 support no
>> Audio drivers coreaudio
>> Block whitelist (rw)
>> Block whitelist (ro)
>> VirtFS support no
>> VNC support yes
>> VNC SASL support yes
>> VNC JPEG support yes
>> VNC PNG support yes
>> xen support no
>> brlapi support no
>> bluez support no
>> Documentation yes
>> PIE no
>> vde support no
>> netmap support no
>> Linux AIO support no
>> ATTR/XATTR support no
>> Install blobs yes
>> KVM support no
>> RDMA support no
>> TCG interpreter no
>> fdt support yes
>> preadv support no
>> fdatasync no
>> madvise yes
>> posix_madvise yes
>> sigev_thread_id no
>> uuid support yes
>> libcap-ng support no
>> vhost-net support no
>> vhost-scsi support no
>> Trace backends log
>> spice support no
>> rbd support no
>> xfsctl support no
>> smartcard support no
>> libusb yes
>> usb net redir yes
>> OpenGL support no
>> OpenGL dmabufs no
>> libiscsi support no
>> libnfs support no
>> build guest agent yes
>> QGA VSS support no
>> QGA w32 disk info no
>> QGA MSI support no
>> seccomp support no
>> coroutine backend sigaltstack
>> coroutine pool yes
>> GlusterFS support no
>> Archipelago support no
>> gcov gcov
>> gcov enabled no
>> TPM support yes
>> libssh2 support no
>> TPM passthrough no
>> QOM debugging yes
>> vhdx yes
>> lzo support no
>> snappy support no
>> bzip2 support yes
>> NUMA host support no
>> tcmalloc support no
>> jemalloc support no
>> avx2 optimization no
>>
>>
>>
>> The config.log file:
>>
>
>
>> gcc-4.9 -m64 -DOS_OBJECT_USE_OBJC=0 -arch x86_64 -D_GNU_SOURCE
>> -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes
>> -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes
>> -fno-strict-aliasing -fno-common -Wendif-labels -Wmissing-include-dirs
>> -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self
>> -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition
>> -Wtype-limits -fstack-protector-strong
>> -I/usr/local/Cellar/gnutls/3.4.11/include
>> -I/usr/local/Cellar/nettle/3.2/include
>> -I/usr/local/Cellar/libtasn1/4.8/include -I/opt/local/include -o
>> config-temp/qemu-conf.exe config-temp/qemu-conf.c -m64 -framework
>> CoreFoundation -framework IOKit -arch x86_64 -g
>> -L/usr/local/Cellar/gnutls/3.4.11/lib -lgnutls
>
>
>
>> gcc-4.9 -m64 -DOS_OBJECT_USE_OBJC=0 -arch x86_64 -D_GNU_SOURCE
>> -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes
>> -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes
>> -fno-strict-aliasing -fno-common -Wendif-labels -Wmissing-include-dirs
>> -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self
>> -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition
>> -Wtype-limits -fstack-protector-strong
>> -I/usr/local/Cellar/gnutls/3.4.11/include
>> -I/usr/local/Cellar/nettle/3.2/include
>> -I/usr/local/Cellar/libtasn1/4.8/include -I/opt/local/include
>> -I/usr/local/Cellar/nettle/3.2/include
>> -I/usr/local/Cellar/nettle/3.2/include -o config-temp/qemu-conf.exe
>> config-temp/qemu-conf.c -m64 -framework CoreFoundation -framework IOKit
>> -arch x86_64 -g -L/usr/local/Cellar/nettle/3.2/lib -lnettle
>
> This is the link line where configure tested for the KDF function and it
> looks normal and
> is pointing the linker to /usr/local/Cellar/nettle/3.2/lib
>
>
>
>> gcc-4.9 -I/opt/local/include/pixman-1
>> -I/Users/john/Documents/Development/Projects/Qemu/qemu-git/dtc/libfdt -m64
>> -DOS_OBJECT_USE_OBJC=0 -arch x86_64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
>> -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef
>> -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common
>> -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs
>> -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers
>> -Wold-style-declaration -Wold-style-definition -Wtype-limits
>> -fstack-protector-strong -I/usr/local/Cellar/gnutls/3.4.11/include
>> -I/usr/local/Cellar/nettle/3.2/include
>> -I/usr/local/Cellar/libtasn1/4.8/include -I/opt/local/include
>> -I/usr/local/Cellar/nettle/3.2/include -I/opt/local/include/libpng16
>> -I/usr/local/Cellar/libusb/1.0.20/include/libusb-1.0
>> -I/usr/local/Cellar/usbredir/0.7.1/include
>> -I/Users/john/Documents/Development/Projects/Qemu/qemu-git/tests -O2
>> -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -D_REENTRANT
>> -I/usr/local/Cellar/glib/2.46.2/include/glib-2.0
>> -I/usr/local/Cellar/glib/2.46.2/lib/glib-2.0/include
>> -I/usr/local/opt/gettext/include -g -m64 -framework CoreFoundation
>> -framework IOKit -arch x86_64 -g -o qemu-nbd qemu-nbd.o async.o
>> thread-pool.o block.o blockjob.o main-loop.o iohandler.o qemu-timer.o
>> aio-posix.o qemu-io-cmds.o block/raw_bsd.o block/qcow.o block/vdi.o
>> block/vmdk.o block/cloop.o block/bochs.o block/vpc.o block/vvfat.o
>> block/qcow2.o block/qcow2-refcount.o block/qcow2-cluster.o
>> block/qcow2-snapshot.o block/qcow2-cache.o block/qed.o block/qed-gencb.o
>> block/qed-l2-cache.o block/qed-table.o block/qed-cluster.o block/qed-check.o
>> block/vhdx.o block/vhdx-endian.o block/vhdx-log.o block/quorum.o
>> block/parallels.o block/blkdebug.o block/blkverify.o block/blkreplay.o
>> block/block-backend.o block/snapshot.o block/qapi.o block/raw-posix.o
>> block/null.o block/mirror.o block/io.o block/throttle-groups.o block/nbd.o
>> block/nbd-client.o block/sheepdog.o block/accounting.o block/dirty-bitmap.o
>> block/write-threshold.o block/crypto.o nbd/server.o nbd/client.o
>> nbd/common.o block/curl.o block/dmg.o crypto/init.o crypto/hash.o
>> crypto/aes.o crypto/desrfb.o crypto/cipher.o crypto/tlscreds.o
>> crypto/tlscredsanon.o crypto/tlscredsx509.o crypto/tlssession.o
>> crypto/secret.o crypto/random-gnutls.o crypto/pbkdf.o crypto/pbkdf-nettle.o
>> crypto/ivgen.o crypto/ivgen-essiv.o crypto/ivgen-plain.o
>> crypto/ivgen-plain64.o crypto/afsplit.o crypto/xts.o crypto/block.o
>> crypto/block-qcow.o crypto/block-luks.o io/channel.o io/channel-buffer.o
>> io/channel-command.o io/channel-file.o io/channel-socket.o io/channel-tls.o
>> io/channel-watch.o io/channel-websock.o io/channel-util.o io/task.o
>> qom/object.o qom/container.o qom/qom-qobject.o qom/object_interfaces.o
>> libqemuutil.a libqemustub.a -lz -L/opt/local/lib -lcurl -lbz2
>> -L/usr/local/Cellar/glib/2.46.2/lib -L/usr/local/opt/gettext/lib
>> -lgthread-2.0 -lglib-2.0 -lintl -lz -lz -L/usr/local/Cellar/nettle/3.2/lib
>> -lnettle -L/usr/local/Cellar/gnutls/3.4.11/lib -lgnutls -lutil
>> Undefined symbols for architecture x86_64:
>> "_nettle_cast5_set_key", referenced from:
>> _qcrypto_cipher_new in cipher.o
>> ld: symbol(s) not found for architecture x86_64
>> collect2: error: ld returned 1 exit status
>> make: *** [qemu-nbd] Error 1
>
> This linker line again looks basically sound. It is still passing the
> correct -lnettle arg, and the -I and -L args to point to the nettle
> 3.2 installation.
>
> Given that we found the "KDF" support in nettle, we know that it is
> new enough to support the "nettle_cast5_set_key" function too so
> we ought to link correctly.
>
> The only thing that occurs to me is that we have a number of other
> -L args present - eg -L/opt/local/lib.
>
> I wonder if one of those other search paths has a differnet version
> of nettle installed in it, causing gcc to link to the wrong one.
I did a search and found libnettle.4.7.dylib in /opt/local/lib. I also found
libnettle.6.2.dylib in /usr/local/Cellar/nettle/3.2/lib.