[libvirt] [PATCH 06/10] Qemu Monitor API entry point.

Chris Lalancette clalance at redhat.com
Tue Apr 27 20:16:15 UTC 2010


On 04/22/2010 08:27 AM, Daniel P. Berrange wrote:
>> --- a/src/Makefile.am
>> +++ b/src/Makefile.am
>> @@ -32,7 +32,7 @@ if WITH_NETWORK
>>  UUID=$(shell uuidgen 2>/dev/null)
>>  endif
>>  
>> -lib_LTLIBRARIES = libvirt.la
>> +lib_LTLIBRARIES = libvirt.la libvirt-qemu.la
>>  
>>  moddir = $(libdir)/libvirt/drivers
>>  mod_LTLIBRARIES =
>> @@ -947,6 +947,12 @@ libvirt_test_la_LIBADD = $(libvirt_la_LIBADD)
>>  libvirt_test_la_LDFLAGS = $(test_LDFLAGS)
>>  libvirt_test_la_CFLAGS = $(COVERAGE_CFLAGS)
>>  
>> +libvirt_qemu_la_SOURCES = libvirt-qemu.c
>> +libvirt_qemu_la_LDFLAGS = $(CYGWIN_EXTRA_LDFLAGS) $(MINGW_EXTRA_LDFLAGS)
>> +libvirt_qemu_la_CFLAGS = $(COVERAGE_CFLAGS)
>> +libvirt_qemu_la_LIBADD = libvirt_util.la libvirt_driver_qemu.la \
>> +			libvirt_driver_remote.la $(CYGWIN_EXTRA_LIBADD) \
>> +			../gnulib/lib/libgnu.la
> 
> This is still going to cause duplicate copies of the code to be
> statically linked in. If you just mention 'libvirt.la', then it
> should dynamically link to the libvirt.so with no duplication.
> You may need to export some more private symbols but that's not
> a big issue.

I actually tried to do this, but I can't get it to work.  It certainly
might be my unfamiliarity with the auto* tools, but doing something like:

diff --git a/src/Makefile.am b/src/Makefile.am
index 3994f00..04aa203 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -989,11 +989,11 @@ libvirt_test_la_LDFLAGS = $(test_LDFLAGS)
 libvirt_test_la_CFLAGS = $(COVERAGE_CFLAGS)
 
 libvirt_qemu_la_SOURCES = libvirt-qemu.c
-libvirt_qemu_la_LDFLAGS = $(CYGWIN_EXTRA_LDFLAGS) $(MINGW_EXTRA_LDFLAGS)
+libvirt_qemu_la_LDFLAGS = $(VERSION_SCRIPT_FLAGS)$(LIBVIRT_SYMBOL_FILE) \
+                          -version-info $(LIBVIRT_VERSION_INFO) \
+                          $(CYGWIN_EXTRA_LDFLAGS) $(MINGW_EXTRA_LDFLAGS)
 libvirt_qemu_la_CFLAGS = $(COVERAGE_CFLAGS)
-libvirt_qemu_la_LIBADD = libvirt_util.la libvirt_driver_qemu.la \
-                       libvirt_driver_remote.la $(CYGWIN_EXTRA_LIBADD) \
-                       ../gnulib/lib/libgnu.la
+libvirt_qemu_la_LIBADD = libvirt.la
 
 libexec_PROGRAMS =
 
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 746327d..4b88a74 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -706,6 +706,7 @@ virReportSystemErrorFull;
 virReportOOMErrorFull;
 virStrerror;
 virSetError;
+virDispatchError;
 
 
 # xml.h
@@ -723,3 +724,11 @@ virXPathLongLong;
 virXPathULongLong;
 virXPathLongHex;
 virXPathULongHex;
+
+
+# remote_driver.h
+remoteQemuMonitorCommand;
+
+
+# qemu_driver.h
+qemuMonitorCommand;
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
index b4db904..22d53f9 100644
--- a/src/libvirt_public.syms
+++ b/src/libvirt_public.syms
@@ -393,5 +393,8 @@ LIBVIRT_0.8.0 {
         virDomainSnapshotFree;
 } LIBVIRT_0.7.7;
 
-
+LIBVIRT_0.8.1 {
+    global:
+        virDomainQemuMonitorCommand;
+} LIBVIRT_0.8.0;

Causes the build to fail when linking virsh:

  CCLD   virsh
../src/.libs/libvirt-qemu.so: undefined reference to `qemuMonitorCommand'
collect2: ld returned 1 exit status

Indeed, if I nm src/.libs/libvirt-qemu.so:

[clalance at localhost libvirt (qemu_monitor)]$ nm src/.libs/libvirt-qemu.so | grep Monitor
         U qemuMonitorCommand
         U remoteQemuMonitorCommand@@LIBVIRT_PRIVATE_0.8.0
000010b0 T virDomainQemuMonitorCommand

Any suggestions about what I'm doing wrong?

-- 
Chris Lalancette




More information about the libvir-list mailing list