On Jun 2, 2016, at 1:06 PM, Daniel P. Berrange wrote: > On Thu, Jun 02, 2016 at 01:01:46PM -0400, Programmingkid wrote: >> >> On May 31, 2016, at 12:00 PM, Daniel P. Berrange wrote: >> >>> On Tue, May 31, 2016 at 11:48:45AM -0400, Programmingkid wrote: >>>> >>>> On May 31, 2016, at 10:51 AM, Daniel P. Berrange wrote: >>>>>> 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. >>> >>> Ah ha, that sounds like it could well be the cause of the problems. >>> >>> I'm not sure if there's a reason you have nettle in both /opt/local/lib >>> and /usr/local/Cellar/nettle/3.2/lib. The -L/opt/local/lib arg appears >>> before the -L/usr/loca/Cellar/nettle/3.2/lib arg, so I expect that means >>> it will be picking up the older libnettle.4.7.dylib first :-( >>> >>> Changing the order of the -L arg that QEMU uses is not exactly a >>> straightforward / practical thing todo. If its possible for you >>> to get rid of the older 4.7.dylib file i expect that would fix >>> the QEMU build, but not sure if that'll break something else on >>> your OS-X system. >>> >>> I'm not really sure there's much we can do to detect this problem >>> in QEMU's configure script either. The config.log file seems to >>> show that at the time we probe for nettle & test linking with it, >>> we've not yet detected the later that uses -L/opt/local/lib. >> >> Maybe we can change things so that we only use the highest version of nettle >> detected. > > AFAIK, it is the linker that would have todo that, not something under > our direct control. We just tell the linker what directories to look > in and in your case you have different copies of the same lib in multiple > places and the linker picks the first that it finds. > >> Nettle is a library that deals with cryptography which I don't need or use. >> Is there a way to turn off its inclusion into QEMU? > > Of course, you can always use the --disable-nettle flag to configure > or force use of gcrypt instead with --enable-gcrypt > > Regards, > Daniel
Thank you very much for your help.