From e0e3ff9986778666bc665801af48923d30eb8ee7 Mon Sep 17 00:00:00 2001 From: malaterre Date: Mon, 10 Jan 2005 19:23:31 +0000 Subject: [PATCH] BUG: Hopefully fix the bug on MacOSX and static global initialization. This is the only -minor- patch I found that both please MacOSX and VS6. Other patch would be to declare a const std::string & GDCM_UNFOUND() instead, but this would require a lot of change. Another approach wqould be that Global create those string and GDCM_UNFOUND becomes a pointer to a string (which gdcm::Global would destroy at exit). --- src/gdcmCommon.h | 30 +++++++++++++++++++++++------- src/gdcmGlobal.cxx | 16 ++-------------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/gdcmCommon.h b/src/gdcmCommon.h index 6f7b6005..bbccb6b0 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 18:09:07 $ - Version: $Revision: 1.47 $ + Date: $Date: 2005/01/10 19:23:31 $ + Version: $Revision: 1.48 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -78,11 +78,27 @@ namespace gdcm #define DICT_TS "dicomTS.dic" #define DICT_VR "dicomVR.dic" -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; +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 /// \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 e5597cb9..d3dc6da8 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/09 00:13:26 $ - Version: $Revision: 1.11 $ + Date: $Date: 2005/01/10 19:23:31 $ + Version: $Revision: 1.12 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -27,18 +27,6 @@ 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 * \brief Pointer to a container, holding _all_ the Dicom Dictionaries. -- 2.48.1