From e9a27a25c5f3c9933e6fe2ba1ef53e2797006727 Mon Sep 17 00:00:00 2001 From: malaterre Date: Mon, 10 Jan 2005 20:52:39 +0000 Subject: [PATCH] ENH: Finally remove previous solution. Found a much better (and simplier approach) that -seems to- works in every configuration: Win32 static/shared and MacOSX (within ITK or not) --- src/gdcmCommon.h | 40 ++++++++++++++-------------------------- src/gdcmGlobal.cxx | 15 +++++++++++++-- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/gdcmCommon.h b/src/gdcmCommon.h index bbccb6b0..a7e02aa9 100644 --- a/src/gdcmCommon.h +++ b/src/gdcmCommon.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmCommon.h,v $ Language: C++ - Date: $Date: 2005/01/10 19:23:31 $ - Version: $Revision: 1.48 $ + Date: $Date: 2005/01/10 20:52:39 $ + Version: $Revision: 1.49 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -57,10 +57,14 @@ typedef unsigned int uint32_t; #define UINT32_MAX (4294967295U) #endif -#if defined(_MSC_VER) || defined(__BORLANDC__) -#define GDCM_EXPORT __declspec( dllexport ) +#if defined(_WIN32) && defined(BUILD_SHARED_LIBS) + #ifdef gdcm_EXPORTS + #define GDCM_EXPORT __declspec( dllexport ) + #else + #define GDCM_EXPORT __declspec( dllimport ) + #endif #else -#define GDCM_EXPORT + #define GDCM_EXPORT #endif #include @@ -78,27 +82,11 @@ namespace gdcm #define DICT_TS "dicomTS.dic" #define DICT_VR "dicomVR.dic" -struct Dummy {}; -template -struct Strings_ -{ - static std::string const UNKNOWN; - static std::string const UNFOUND; - static std::string const BINLOADED; - static std::string const NOTLOADED; - static std::string const UNREAD; -}; -template std::string const Strings_::UNKNOWN = "gdcm::Unknown"; -template std::string const Strings_::UNFOUND = "gdcm::Unfound"; -template std::string const Strings_::BINLOADED = "gdcm::Binary data loaded"; -template std::string const Strings_::NOTLOADED = "gdcm::NotLoaded"; -template std::string const Strings_::UNREAD = "gdcm::UnRead"; -typedef Strings_ Strings; -#define GDCM_UNKNOWN Strings::UNKNOWN -#define GDCM_UNFOUND Strings::UNFOUND -#define GDCM_BINLOADED Strings::BINLOADED -#define GDCM_NOTLOADED Strings::NOTLOADED -#define GDCM_UNREAD Strings::UNREAD +GDCM_EXPORT extern const std::string GDCM_UNKNOWN; +GDCM_EXPORT extern const std::string GDCM_UNFOUND; +GDCM_EXPORT extern const std::string GDCM_BINLOADED; +GDCM_EXPORT extern const std::string GDCM_NOTLOADED; +GDCM_EXPORT extern const std::string GDCM_UNREAD; /// \brief TagKey is made to hold an "universal" (as in URL, Universal /// Ressource Locator) key to a DocEntry i.e. a dicom tag. diff --git a/src/gdcmGlobal.cxx b/src/gdcmGlobal.cxx index d3dc6da8..6231e2a2 100644 --- a/src/gdcmGlobal.cxx +++ b/src/gdcmGlobal.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmGlobal.cxx,v $ Language: C++ - Date: $Date: 2005/01/10 19:23:31 $ - Version: $Revision: 1.12 $ + Date: $Date: 2005/01/10 20:52:39 $ + Version: $Revision: 1.13 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -26,6 +26,17 @@ namespace gdcm { +// Those global string that are return by reference everywhere in gdcm code +// used to be in gdcmCommon.h but due to a 'bug' in gcc/MacOSX +// you cannot have static initialization in a multithreaded environment +// since there is a lazy construction everything got skrew up somehow +// Therefore the actual initiliazation is done in a cxx file (avoid +// duplicated symbol), and an extern is used in gdcmCommon.h +const std::string GDCM_UNKNOWN = "gdcm::Unknown"; +const std::string GDCM_UNFOUND = "gdcm::Unfound"; +const std::string GDCM_BINLOADED = "gdcm::Binary data loaded"; +const std::string GDCM_NOTLOADED = "gdcm::NotLoaded"; +const std::string GDCM_UNREAD = "gdcm::UnRead"; /** * \ingroup Globals -- 2.48.1