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. 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?