Ozkan Sezer
2014-May-24 21:28 UTC
[flac-dev] make dllimport/dllexport attributes work with mingw (and others)
On 5/24/14, lvqcl <lvqcl.mail at gmail.com> wrote:> Ozkan Sezer <sezeroz at gmail.com> ?????(?) ? ????? ?????? Sat, 24 May 2014 > 10:16:15 +0400: > >> - changes the _MSC_VER condition to universally _WIN32: MSVC, as well >> as GCC supports this. > > MSYS/MinGW 4.8.3, 4.9.0 can't compile code from git after this patch: > > format.c:47:22: error: variable 'FLAC__VERSION_STRING' definition is marked > dllimport > FLAC_API const char *FLAC__VERSION_STRING = VERSION; > ^ > format.c:47:22: warning: 'FLAC__VERSION_STRING' redeclared without dllimport > attribute: previous dllimport ignored [-Wattributes] > format.c:49:22: error: variable 'FLAC__VENDOR_STRING' definition is marked > dllimport > FLAC_API const char *FLAC__VENDOR_STRING = "reference libFLAC " VERSION " > 20130526"; > ^ > format.c:49:22: warning: 'FLAC__VENDOR_STRING' redeclared without dllimport > attribute: previous dllimport ignored [-Wattributes] > > ... > ... > > > FLAC_API_EXPORTS macro is defined in libFLAC_dynamic.vcproj, > FLACPP_API_EXPORTS macro is defined in libFLAC++_dynamic.vcproj, > but MinGW/GCC makefiles don't define them anywhere.My apologies, obviously sent an old testing patch. Correct one is attached (declspec2.diff). Compilation tested using MinGW (gcc-3.4.5, binutils-2.20), and MinGW-w64 (gcc-4.5.4, binutils-2.21.90.) -- O.S. -------------- next part -------------- diff --git a/include/FLAC/export.h b/include/FLAC/export.h index 2232b41..185c282 100644 --- a/include/FLAC/export.h +++ b/include/FLAC/export.h @@ -59,11 +59,11 @@ #if defined(FLAC__NO_DLL) #define FLAC_API -#elif defined(_MSC_VER) -#ifdef FLAC_API_EXPORTS -#define FLAC_API _declspec(dllexport) +#elif defined(_WIN32) +#if defined(FLAC_API_EXPORTS) || defined(DLL_EXPORT) +#define FLAC_API __declspec(dllexport) #else -#define FLAC_API _declspec(dllimport) +#define FLAC_API __declspec(dllimport) #endif #elif defined(FLAC__USE_VISIBILITY_ATTR) diff --git a/include/FLAC++/export.h b/include/FLAC++/export.h index 11c09e6..91649a5 100644 --- a/include/FLAC++/export.h +++ b/include/FLAC++/export.h @@ -59,11 +59,11 @@ #if defined(FLAC__NO_DLL) #define FLACPP_API -#elif defined(_MSC_VER) -#ifdef FLACPP_API_EXPORTS -#define FLACPP_API _declspec(dllexport) +#elif defined(_WIN32) +#if defined(FLACPP_API_EXPORTS) || defined(DLL_EXPORT) +#define FLACPP_API __declspec(dllexport) #else -#define FLACPP_API _declspec(dllimport) +#define FLACPP_API __declspec(dllimport) #endif #elif defined(FLAC__USE_VISIBILITY_ATTR) diff --git a/src/flac/Makefile.am b/src/flac/Makefile.am index 389215e..a4929ab 100644 --- a/src/flac/Makefile.am +++ b/src/flac/Makefile.am @@ -44,6 +44,9 @@ flac_SOURCES = \ utils.h \ vorbiscomment.h +if OS_IS_WINDOWS +win_utf8_lib = $(top_builddir)/src/share/win_utf8_io/libwin_utf8_io.la +endif flac_LDADD = \ $(top_builddir)/src/share/utf8/libutf8.la \ $(top_builddir)/src/share/grabbag/libgrabbag.la \ @@ -51,7 +54,7 @@ flac_LDADD = \ $(top_builddir)/src/share/replaygain_analysis/libreplaygain_analysis.la \ $(top_builddir)/src/share/replaygain_synthesis/libreplaygain_synthesis.la \ $(top_builddir)/src/libFLAC/libFLAC.la \ - @LIBICONV@ \ + $(win_utf8_lib) @LIBICONV@ \ -lm CLEANFILES = flac.exe diff --git a/src/metaflac/Makefile.am b/src/metaflac/Makefile.am index d6e76e8..94fda50 100644 --- a/src/metaflac/Makefile.am +++ b/src/metaflac/Makefile.am @@ -42,12 +42,15 @@ metaflac_SOURCES = \ utils.h metaflac_LDFLAGS = $(AM_LDFLAGS) +if OS_IS_WINDOWS +win_utf8_lib = $(top_builddir)/src/share/win_utf8_io/libwin_utf8_io.la +endif metaflac_LDADD = \ $(top_builddir)/src/share/grabbag/libgrabbag.la \ $(top_builddir)/src/share/replaygain_analysis/libreplaygain_analysis.la \ $(top_builddir)/src/share/getopt/libgetopt.la \ $(top_builddir)/src/share/utf8/libutf8.la \ $(top_builddir)/src/libFLAC/libFLAC.la \ - @LIBICONV@ + $(win_utf8_lib) @LIBICONV@ CLEANFILES = metaflac.exe diff --git a/src/test_grabbag/cuesheet/Makefile.am b/src/test_grabbag/cuesheet/Makefile.am index a7fc5c5..134afb2 100644 --- a/src/test_grabbag/cuesheet/Makefile.am +++ b/src/test_grabbag/cuesheet/Makefile.am @@ -24,8 +24,13 @@ AM_CPPFLAGS = -I$(top_builddir) -I$(srcdir)/include -I$(top_srcdir)/include noinst_PROGRAMS = test_cuesheet test_cuesheet_SOURCES = \ main.c + +if OS_IS_WINDOWS +win_utf8_lib = $(top_builddir)/src/share/win_utf8_io/libwin_utf8_io.la +endif test_cuesheet_LDADD = \ $(top_builddir)/src/share/grabbag/libgrabbag.la \ + $(win_utf8_lib) \ $(top_builddir)/src/share/replaygain_analysis/libreplaygain_analysis.la \ $(top_builddir)/src/libFLAC/libFLAC.la diff --git a/src/test_grabbag/picture/Makefile.am b/src/test_grabbag/picture/Makefile.am index 677fe5c..83af1e8 100644 --- a/src/test_grabbag/picture/Makefile.am +++ b/src/test_grabbag/picture/Makefile.am @@ -25,8 +25,12 @@ noinst_PROGRAMS = test_picture test_picture_SOURCES = \ main.c +if OS_IS_WINDOWS +win_utf8_lib = $(top_builddir)/src/share/win_utf8_io/libwin_utf8_io.la +endif test_picture_LDADD = \ $(top_builddir)/src/share/grabbag/libgrabbag.la \ + $(win_utf8_lib) \ $(top_builddir)/src/libFLAC/libFLAC.la CLEANFILES = test_picture.exe diff --git a/src/test_libFLAC++/Makefile.am b/src/test_libFLAC++/Makefile.am index 281557d..98eee9e 100644 --- a/src/test_libFLAC++/Makefile.am +++ b/src/test_libFLAC++/Makefile.am @@ -22,13 +22,17 @@ EXTRA_DIST = \ AM_CPPFLAGS = -I$(top_builddir) -I$(srcdir)/include -I$(top_srcdir)/include noinst_PROGRAMS = test_libFLAC++ + +if OS_IS_WINDOWS +win_utf8_lib = $(top_builddir)/src/share/win_utf8_io/libwin_utf8_io.la +endif test_libFLAC___LDADD = \ $(top_builddir)/src/share/grabbag/libgrabbag.la \ $(top_builddir)/src/share/replaygain_analysis/libreplaygain_analysis.la \ $(top_builddir)/src/test_libs_common/libtest_libs_common.la \ $(top_builddir)/src/libFLAC++/libFLAC++.la \ $(top_builddir)/src/libFLAC/libFLAC.la \ - @OGG_LIBS@ \ + $(win_utf8_lib) @OGG_LIBS@ \ -lm test_libFLAC___SOURCES = \ diff --git a/src/test_libFLAC/Makefile.am b/src/test_libFLAC/Makefile.am index 407c8ea..5c3d4f1 100644 --- a/src/test_libFLAC/Makefile.am +++ b/src/test_libFLAC/Makefile.am @@ -25,6 +25,7 @@ AM_CPPFLAGS = -I$(top_builddir) -I$(srcdir)/include -I$(top_srcdir)/include -I$( noinst_PROGRAMS = test_libFLAC if OS_IS_WINDOWS +AM_CPPFLAGS += -DFLAC__NO_DLL win_utf8_lib = $(top_builddir)/src/share/win_utf8_io/libwin_utf8_io.la endif diff --git a/src/test_seeking/Makefile.am b/src/test_seeking/Makefile.am index 87ddb36..bb7a564 100644 --- a/src/test_seeking/Makefile.am +++ b/src/test_seeking/Makefile.am @@ -25,8 +25,13 @@ AM_CFLAGS = @OGG_CFLAGS@ AM_CPPFLAGS = -I$(top_builddir) -I$(srcdir)/include -I$(top_srcdir)/include noinst_PROGRAMS = test_seeking + +if OS_IS_WINDOWS +win_utf8_lib = $(top_builddir)/src/share/win_utf8_io/libwin_utf8_io.la +endif + test_seeking_LDADD = \ - $(top_builddir)/src/libFLAC/libFLAC.la + $(win_utf8_lib) $(top_builddir)/src/libFLAC/libFLAC.la test_seeking_SOURCES = \ main.c
Erik de Castro Lopo
2014-May-24 23:33 UTC
[flac-dev] make dllimport/dllexport attributes work with mingw (and others)
Ozkan Sezer wrote:> My apologies, obviously sent an old testing patch. Correct one is > attached (declspec2.diff). Compilation tested using MinGW (gcc-3.4.5, > binutils-2.20), and MinGW-w64 (gcc-4.5.4, binutils-2.21.90.)lvqcl, Can you please validate this new patch? Cheers, Erik -- ---------------------------------------------------------------------- Erik de Castro Lopo http://www.mega-nerd.com/
lvqcl
2014-May-25 09:47 UTC
[flac-dev] make dllimport/dllexport attributes work with mingw (and others)
Erik de Castro Lopo wrote:> Ozkan Sezer wrote: > >> My apologies, obviously sent an old testing patch. Correct one is >> attached (declspec2.diff). Compilation tested using MinGW (gcc-3.4.5, >> binutils-2.20), and MinGW-w64 (gcc-4.5.4, binutils-2.21.90.) > > lvqcl, > > Can you please validate this new patch?It works, but only if i call ./configure without arguments. And it fails if i call ./configure with "--disable-shared", "--enable-static" or both "--disable-shared --enable-static". (If I use ./configure without arguments then flac.exe requires libFLAC-8.dll, which in turn requires libgcc_s_sjlj-1.dll. Adding "--disable-shared" makes flac.exe standalone: it doesn't need those libraries thst are foreign to Windows systems).
Possibly Parallel Threads
- make dllimport/dllexport attributes work with mingw (and others)
- make dllimport/dllexport attributes work with mingw (and others)
- make dllimport/dllexport attributes work with mingw (and others)
- make dllimport/dllexport attributes work with mingw (and others)
- make dllimport/dllexport attributes work with mingw (and others)