Hello, I just started with using log4cxx. It's a nice logging library and I like using it. But for some reason I get a crash at exiting my program. I run it in the debugger and here is the result:
Program received signal SIGSEGV, Segmentation fault. 0x001b2614 in ~ObjectPtrT (this=0x80ef7b8, __in_chrg=<value optimized out>) at /usr/include/log4cxx/helpers/objectptr.h:100 100 p->releaseRef(); (gdb) bt #0 0x001b2614 in ~ObjectPtrT (this=0x80ef7b8, __in_chrg=<value optimized out>) at /usr/include/log4cxx/helpers/objectptr.h:100 #1 0x0093d2cf in std::_Rb_tree<std::string, std::pair<std::string const, std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>, std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > >, std::_Select1st<std::pair<std::string const, std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>, std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >, std::less<std::string>, std::allocator<std::pair<std::string const, std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>, std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > > >::_M_erase(std::_Rb_tree_node<std::pair<std::string const, std::vector<log4cxx::helpers::ObjectPtrT<log4cxx::Logger>, std::allocator<log4cxx::helpers::ObjectPtrT<log4cxx::Logger> > > > >*) () from /usr/lib/liblog4cxx.so.10 #2 0x0093b4a4 in log4cxx::Hierarchy::~Hierarchy() () from /usr/lib/liblog4cxx.so.10 #3 0x00961b75 in log4cxx::helpers::ObjectImpl::releaseRef() const () from /usr/lib/liblog4cxx.so.10 #4 0x00939972 in log4cxx::Hierarchy::releaseRef() const () from /usr/lib/liblog4cxx.so.10 #5 0x009561f7 in log4cxx::spi::DefaultRepositorySelector::~DefaultRepositorySelector() () from /usr/lib/liblog4cxx.so.10 #6 0x00961b75 in log4cxx::helpers::ObjectImpl::releaseRef() const () from /usr/lib/liblog4cxx.so.10 #7 0x0091d832 in log4cxx::spi::DefaultRepositorySelector::releaseRef() const () from /usr/lib/liblog4cxx.so.10 #8 0x00956099 in log4cxx::helpers::ObjectPtrT<log4cxx::spi::RepositorySelector>::~ObjectPtrT() () from /usr/lib/liblog4cxx.so.10 #9 0x00702588 in __cxa_finalize (d=0xa0338c) at cxa_finalize.c:56 #10 0x009001e4 in ?? () from /usr/lib/liblog4cxx.so.10 #11 0x009adcd0 in _fini () from /usr/lib/liblog4cxx.so.10 #12 0x0011e216 in _dl_fini () at dl-fini.c:248 #13 0x007021bf in __run_exit_handlers (status=0, listp=0x829324, run_list_atexit=true) at exit.c:78 #14 0x0070222f in *__GI_exit (status=0) at exit.c:100 #15 0x006e9bde in __libc_start_main (main=0x806124d <main>, argc=1, ubp_av=0xbfffee54, init=0x80636a0 <__libc_csu_init>, fini=0x8063690 <__libc_csu_fini>, rtld_fini=0x11e030 <_dl_fini>, ---Type <return> to continue, or q <return> to quit--- stack_end=0xbfffee4c) at libc-start.c:258 #16 0x080534f1 in _start () Maybe it's a problem how I use log4cxx. I defined a stupid wrapper class for my project: http://codepad.org/EWDVx8mE This helps me to cut down dependencies (e.g. for a win32 build where no development happens). Then I use the Logger object like this: in the application: // all needed includes and namespaces direct ... PropertyConfigurator::configure (searchDataDir () + "/logging.prop"); and then the wrapper in the library (only cpp files!) static Logger logger ("stateval.StateMachineThread"); void MyClass::myFucntion () { LOG4CXX_TRACE (logger, "a trace"); } The logging works, but it crashes at exit... I won't like to put Logger as member in the Header files to cut down dependencies. And it needs to be static for sure... So have you any ideas what I made wrong here? Have you any experiences how you organise your logger variables in your source code? regards Andreas