From db966da330a1caf634df8f96dd78640b7d9695fb Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 25 Oct 2015 13:42:23 +0100 Subject: [PATCH] Use explicit dllexport attribute for g++ 4.7 and later The bug that resulted in creating huge DLLs that took inordinate amounts of memory and time to link with g++ 4.5 has been fixed in 4.7, so don't export everything when using it, as this results in even smaller DLLs. The situation with 4.6 is unknown, so leave behaviour with it unchanged. See 49d2c0adc39cb44c2047d7947c117c94dde8088e --- include/wx/dlimpexp.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/include/wx/dlimpexp.h b/include/wx/dlimpexp.h index 09b15f6bc0..3412137fdf 100644 --- a/include/wx/dlimpexp.h +++ b/include/wx/dlimpexp.h @@ -26,13 +26,16 @@ # define WXEXPORT __declspec(dllexport) # define WXIMPORT __declspec(dllimport) /* - While gcc also supports __declspec(dllexport), it creates unusably huge - DLL files since gcc 4.5 (while taking horribly long amounts of time), + While gcc also supports __declspec(dllexport), it created unusably huge + DLL files in gcc 4.[56] (while taking horribly long amounts of time), see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43601. Because of this we rely on binutils auto export/import support which seems to work - quite well for 4.5+. + quite well for 4.5+. However the problem was fixed in 4.7 and later and + not exporting everything creates smaller DLLs (~8% size difference), so + do use the explicit attributes again for the newer versions. */ -# elif defined(__GNUC__) && !wxCHECK_GCC_VERSION(4, 5) +# elif defined(__GNUC__) && \ + (!wxCHECK_GCC_VERSION(4, 5) || wxCHECK_GCC_VERSION(4, 7)) /* __declspec could be used here too but let's use the native __attribute__ instead for clarity.