The MinGW linker needs the libvirt.def file. --- configure.ac | 5 +++++ src/.gitignore | 1 + src/Makefile.am | 15 +++++++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index bcf1d5a..6e568ee 100644 --- a/configure.ac +++ b/configure.ac @@ -1733,6 +1733,7 @@ CYGWIN_EXTRA_LIBADD= CYGWIN_EXTRA_PYTHON_LIBADD= MINGW_EXTRA_LDFLAGS= WIN32_EXTRA_CFLAGS= +LIBVIRT_SYMBOL_FILE=libvirt.syms case "$host" in *-*-cygwin*) CYGWIN_EXTRA_LDFLAGS="-no-undefined" @@ -1752,6 +1753,9 @@ case "$host" in if test "x$enable_shared" = "xno"; then WIN32_EXTRA_CFLAGS="-DLIBVIRT_STATIC" fi + # Also set the symbol file to .def, so src/Makefile generates libvirt.def + # from libvirt.syms and passes libvirt.def instead of libvirt.syms to the linker + LIBVIRT_SYMBOL_FILE=libvirt.def ;; esac AC_SUBST([CYGWIN_EXTRA_LDFLAGS]) @@ -1759,6 +1763,7 @@ AC_SUBST([CYGWIN_EXTRA_LIBADD]) AC_SUBST([CYGWIN_EXTRA_PYTHON_LIBADD]) AC_SUBST([MINGW_EXTRA_LDFLAGS]) AC_SUBST([WIN32_EXTRA_CFLAGS]) +AC_SUBST([LIBVIRT_SYMBOL_FILE]) dnl Look for windres to build a Windows icon resource. AC_CHECK_TOOL([WINDRES], [windres], [no]) diff --git a/src/.gitignore b/src/.gitignore index 26b8689..a5c27a5 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -12,6 +12,7 @@ Makefile.in *.cov libvirt_parthelper libvirt_lxc +libvirt.def libvirt.syms *.i *.s diff --git a/src/Makefile.am b/src/Makefile.am index 0aa3443..fea1bd3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -828,7 +828,7 @@ EXTRA_DIST += \ libvirt_macvtap.syms \ libvirt_daemon.syms -BUILT_SOURCES = libvirt.syms +BUILT_SOURCES = libvirt.syms libvirt.def libvirt.syms: libvirt_public.syms $(USED_SYM_FILES) rm -f $@-tmp $@ @@ -844,18 +844,25 @@ libvirt.syms: libvirt_public.syms $(USED_SYM_FILES) chmod a-w $@-tmp mv $@-tmp libvirt.syms +libvirt.def: libvirt.syms + rm -f -- $@-tmp $@ + printf 'EXPORTS\n' > $@-tmp + sed -e '/^$$/d; /#/d; /:/d; /\}/d; /\*/d; /LIBVIRT_/d; s/\(.*\)\;/\1/g' $^ >> $@-tmp + chmod a-w $@-tmp + mv $@-tmp libvirt.def + # Empty source list - it merely links a bunch of convenience libs together libvirt_la_SOURCES = libvirt_la_LIBADD += \ $(CYGWIN_EXTRA_LIBADD) ../gnulib/lib/libgnu.la -libvirt_la_LDFLAGS = $(VERSION_SCRIPT_FLAGS)libvirt.syms \ +libvirt_la_LDFLAGS = $(VERSION_SCRIPT_FLAGS)$(LIBVIRT_SYMBOL_FILE) \ -version-info $(LIBVIRT_VERSION_INFO) \ $(COVERAGE_CFLAGS:-f%=-Wc,-f%) \ $(LIBXML_LIBS) \ $(DRIVER_MODULE_LIBS) \ $(CYGWIN_EXTRA_LDFLAGS) $(MINGW_EXTRA_LDFLAGS) libvirt_la_CFLAGS = $(COVERAGE_CFLAGS) -DIN_LIBVIRT -libvirt_la_DEPENDENCIES = $(libvirt_la_LIBADD) libvirt.syms +libvirt_la_DEPENDENCIES = $(libvirt_la_LIBADD) $(LIBVIRT_SYMBOL_FILE) # Create an automake "convenience library" version of libvirt_la, # just for testing, since the test harness requires access to internal @@ -865,7 +872,7 @@ noinst_LTLIBRARIES += libvirt_test.la # Remove version script from convenience library test_LDFLAGS = \ $$(echo '$(libvirt_la_LDFLAGS)' \ - |sed 's!$(VERSION_SCRIPT_FLAGS)libvirt.syms!!' \ + |sed 's!$(VERSION_SCRIPT_FLAGS)$(LIBVIRT_SYMBOL_FILE)!!' \ |sed 's!-version-info $(LIBVIRT_VERSION_INFO)!!') # Just like the above, but with a slightly different set of public symbols. -- 1.6.3.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list