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@localhost libvirt (qemu_monitor)]$ nm src/.libs/libvirt-qemu.so | grep Monitor
U qemuMonitorCommand
U remoteQemuMonitorCommand@(a)LIBVIRT_PRIVATE_0.8.0
000010b0 T virDomainQemuMonitorCommand
Any suggestions about what I'm doing wrong?
--
Chris Lalancette