On Mon, Sep 26, 2016 at 09:19:36AM +0000, Gonglei (Arei) wrote: > > > > > > > -----Original Message----- > > From: Daniel P. Berrange [mailto:berra...@redhat.com] > > Sent: Monday, September 26, 2016 5:14 PM > > To: Gonglei (Arei) > > Cc: qemu-devel@nongnu.org > > Subject: Re: Questions about gcc linker errors in crypto sub-directory > > > > On Mon, Sep 26, 2016 at 09:03:45AM +0000, Gonglei (Arei) wrote: > > > Hi Daniel, > > > > > > I'm coding cryptodev-vhost-user.c as a new cryptodev backend, > > > but the gcc report some linker errors: > > > > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_crypto_cleanup': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:87: > > undefined reference to `vhost_dev_cleanup' > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_crypto_init': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:126: > > undefined reference to `vhost_dev_init' > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_user_opened': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:187: > > undefined reference to `qemu_chr_find' > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:194: > > undefined reference to `qemu_chr_fe_claim_no_fail' > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_user_event': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:213: > > undefined reference to `qemu_chr_set_reconnect_time' > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_user_init': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:257: > > undefined reference to `qemu_chr_add_handlers' > > > crypto/cryptodev-vhost-user.o: In function > > `qcrypto_cryptodev_vhost_user_finalize': > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:353: > > undefined reference to `qemu_chr_add_handlers' > > > /mnt/sdb/gonglei/qemu.git/qemu/crypto/cryptodev-vhost-user.c:354: > > undefined reference to `qemu_chr_fe_release' > > > collect2: ld returned 1 exit status > > > make: *** [qemu-nbd] Error 1 > > > > > > Currently I only change the crypto/Makefile.objs: > > > > > > diff --git a/crypto/Makefile.objs b/crypto/Makefile.objs > > > index b9ad26a..575f64e 100644 > > > --- a/crypto/Makefile.objs > > > +++ b/crypto/Makefile.objs > > > @@ -28,6 +28,7 @@ crypto-obj-y += block-qcow.o > > > crypto-obj-y += block-luks.o > > > crypto-obj-y += cryptodev.o > > > crypto-obj-y += cryptodev-builtin.o > > > +crypto-obj-y += cryptodev-vhost-user.o > > > > The $(crypto-obj-y) variable is intended to only contain general purpose > > crypto code, since it needs to be linked to all QEMU programs. Your > > cryptodev file is specific to system emulators, so must only be linked > > to the system emulator targets. Thus, it should not be added to the > > crypto-obj-y variable. > > > > It probably needs to be added to either common-obj-y or obj-y - I can't > > remember which is "best" > > > common-obj-y is fine! So all cryptodev stuff should be use > $( crypto-obj-y) variable, right? I'll change them in the next version.
Looking at this again, it actually makes me think that your cryptodev stuff would be better in the backends/ directory. That would mean the crypto/ directory is kept as the place for generic crypto infrastructure, and avoiding system emulator specific device backend code. The backends/Makefile.objs is already setup to use common-obj-y and builds various other device backend models. Regards, 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 :|