[MAC] 'static const std::string' in a header file
Mathieu Malaterre
mmalater@nycap.rr.com
Sun Jan 9 04:10:00 GMT 2005
Solution:
I moved:
const std::string foo = "bar";
in a random cxx file, and defined instead:
extern const std::string foo;
in the header file. Everything seems to be working fine now.
Mathieu
Mathieu Malaterre wrote:
> Hello,
>
> I am working on a cross plateform DICOM lib which seems to be working
> fairly well on a variety of plateforms except on MacOSX with gcc.
>
> If I try to run any example it gets stuck on a string construction. I
> believe this has to do with multi thread and c++ object initialization
> on the Mac. Could someone comment on the usage in a header file of:
>
> static const std::string foo = "bar";
>
> Is this a bad practice ? Can it be safely replace by something else
> that would be more 'conventional/robust' ? BTW I cannot change this to a
> regular 'const char foo[]' since I am returning direct const reference
> to this object.
>
> I include the gdb backtrace, hopefully this should mean something for
> someone :)
>
> Thanks
> Mathieu
> $ gcc --version
> gcc (GCC) 3.3 20030304 (Apple Computer, Inc. build 1671)
>
> $ gdbrun ./bin/gdcmTests TestUtil GNU gdb 5.3-20030128 (Apple version
> gdb-330.1) (Fri Jul 16 21:42:28 GMT 2004)
> Copyright 2003 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you
> are
> welcome to change it and/or distribute copies of it under certain
> conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB. Type "show warranty" for details.
> This GDB was configured as "powerpc-apple-darwin".
> Reading symbols for shared libraries ........ done
> Reading symbols for shared libraries ++++..... done
> ^C
> Program received signal SIGINT, Interrupt.
> 0x90016f48 in semaphore_wait_signal_trap ()
> (gdb) bt
> #0 0x90016f48 in semaphore_wait_signal_trap ()
> #1 0x900021e0 in pthread_mutex_lock ()
> #2 0x00c17b6c in std::string::_Rep::_S_create(unsigned long,
> std::allocator<char> const&) () at
> /usr/include/gcc/darwin/3.3/c++/iostream:76
> #3 0x00c18808 in char* std::string::_S_construct<char const*>(char
> const*, char const*, std::allocator<char> const&,
> std::forward_iterator_tag) () at
> /usr/include/gcc/darwin/3.3/c++/iostream:76
> #4 0x00c14fdc in std::string::string(char const*, std::allocator<char>
> const&) () at /usr/include/gcc/darwin/3.3/c++/iostream:76
> #5 0x00c9b6d4 in __static_initialization_and_destruction_0(int, int)
> (__initialize_p=1, __priority=65535) at /Users/kitware/Dashboards/My
> Tests/gdcm/src/gdcmCommon.h:81
> #6 0x00c9c044 in _GLOBAL__I__ZN4gdcm8BinEntryC2EPNS_9DictEntryE () at
> /Users/kitware/Dashboards/My Tests/gdcm/src/gdcmCommon.h:56
> #7 0x8fe17728 in __dyld_call_module_initializers_for_library ()
> #8 0x8fe174a0 in __dyld_call_module_initializers ()
> #9 0x8fe11704 in __dyld_link_in_need_modules ()
> #10 0x8fe110e8 in __dyld_bind_lazy_symbol_reference ()
> #11 0x8fe01340 in __dyld_stub_binding_helper_interface ()
> #12 0x00c14758 in std::__default_alloc_template<true,
> 0>::_S_chunk_alloc(unsigned long, int&) () at
> /usr/include/gcc/darwin/3.3/c++/iostream:76
> #13 0x00c145f8 in std::__default_alloc_template<true,
> 0>::_S_refill(unsigned long) () at
> /usr/include/gcc/darwin/3.3/c++/iostream:76
> #14 0x00c17b80 in std::string::_Rep::_S_create(unsigned long,
> std::allocator<char> const&) () at
> /usr/include/gcc/darwin/3.3/c++/iostream:76
> #15 0x00c18808 in char* std::string::_S_construct<char const*>(char
> const*, char const*, std::allocator<char> const&,
> std::forward_iterator_tag) () at
> /usr/include/gcc/darwin/3.3/c++/iostream:76
> #16 0x00c14fdc in std::string::string(char const*, std::allocator<char>
> const&) () at /usr/include/gcc/darwin/3.3/c++/iostream:76
> #17 0x00c9abc8 in __static_initialization_and_destruction_0(int, int)
> (__initialize_p=1, __priority=65535) at /Users/kitware/Dashboards/My
> Tests/gdcm/src/gdcmCommon.h:81
> #18 0x00c9b538 in _GLOBAL__I__ZN4gdcm4BaseC2Ev () at
> /Users/kitware/Dashboards/My Tests/gdcm/src/gdcmCommon.h:81
> #19 0x8fe17728 in __dyld_call_module_initializers_for_library ()
> #20 0x8fe174a0 in __dyld_call_module_initializers ()
> #21 0x8fe11704 in __dyld_link_in_need_modules ()
> #22 0x8fe1124c in __dyld_bind_lazy_symbol_reference ()
> #23 0x8fe01340 in __dyld_stub_binding_helper_interface ()
> #24 0x00005cc0 in TestUtil(int, char**) () at
> /Users/kitware/Dashboards/My Tests/gdcm/Test/TestUtil.cxx:27
> #25 0x0000346c in main (ac=1, av=0xbffffc64) at
> /Users/kitware/Dashboards/My Tests/gdcm-gcc/Test/gdcmTests.cxx:209
> (gdb) up
> #1 0x900021e0 in pthread_mutex_lock ()
> (gdb)
> #2 0x00c17b6c in std::string::_Rep::_S_create(unsigned long,
> std::allocator<char> const&) () at
> /usr/include/gcc/darwin/3.3/c++/iostream:76
> 76 // For construction of filebuffers for cout, cin, cerr, clog
> et. al.
> (gdb)
> #3 0x00c18808 in char* std::string::_S_construct<char const*>(char
> const*, char const*, std::allocator<char> const&,
> std::forward_iterator_tag) () at
> /usr/include/gcc/darwin/3.3/c++/iostream:76
> 76 // For construction of filebuffers for cout, cin, cerr, clog
> et. al.
> (gdb)
> #4 0x00c14fdc in std::string::string(char const*, std::allocator<char>
> const&) () at /usr/include/gcc/darwin/3.3/c++/iostream:76
> 76 // For construction of filebuffers for cout, cin, cerr, clog
> et. al.
> (gdb)
> #5 0x00c9b6d4 in __static_initialization_and_destruction_0(int, int)
> (__initialize_p=1, __priority=65535) at /Users/kitware/Dashboards/My
> Tests/gdcm/src/gdcmCommon.h:81
> 81 static const std::string GDCM_UNKNOWN = "gdcm::Unknown";
> (gdb)
>
>
>
More information about the Gcc
mailing list