Hi,

I compiled log4cxx as a DLL before and it worked perfectly. Now I wanted to use log4cxx (version 0.10.0) as a static library. I've set the "Configuration Type" to "Static Library .lib" in the log4cxx properties and I changed the Preprocessor -> Preprocessor definitions to LOG4CXX_STATIC. When I compile in release mode I get a library file that is about 14MB big. When I try to use this library in a simple program I get the following linker errors:

1>Linking...
1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static class log4cxx::helpers::ObjectPtrT<class log4cxx::Level> __cdecl log4cxx::Level::getWarn(void)" (__imp_?getw...@level@log4cxx@@sa?av?$objectp...@vlevel@log4cxx@@@help...@2@XZ) 1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const & __thiscall log4cxx::helpers::MessageBuffer::str(class log4cxx::helpers::CharMessageBuffer &)" (__imp_?...@messagebuffer@help...@log4cxx@@qaeabv?$basic_str...@du?$char_traits@d...@std@@v?$alloca...@d@2@@std@@aavcharmessagebuf...@23@@Z) 1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class log4cxx::helpers::CharMessageBuffer & __thiscall log4cxx::helpers::MessageBuffer::operator<<(char const *)" (__imp_??6messagebuf...@helpers@log4cxx@@qaeaavcharmessagebuf...@12@p...@z) 1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall log4cxx::helpers::MessageBuffer::~MessageBuffer(void)" (__imp_??1messagebuf...@helpers@log4cxx@@q...@xz) 1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall log4cxx::helpers::MessageBuffer::MessageBuffer(void)" (__imp_??0messagebuf...@helpers@log4cxx@@q...@xz) 1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: bool __thiscall log4cxx::Logger::isWarnEnabled(void)const " (__imp_?iswarnenab...@logger@log4cxx@@QBE_NXZ) 1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static class log4cxx::helpers::ObjectPtrT<class log4cxx::Logger> __cdecl log4cxx::Logger::getLogger(char const * const)" (__imp_?getlog...@logger@log4cxx@@sa?av?$objectp...@vlogger@log4cxx@@@help...@2@q...@z) 1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall log4cxx::Logger::forcedLog(class log4cxx::helpers::ObjectPtrT<class log4cxx::Level> const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class log4cxx::spi::LocationInfo const &)const " (__imp_?forced...@logger@log4cxx@@qbexabv?$objectp...@vlevel@log4cxx@@@help...@2@abv?$basic_str...@du?$char_traits@d...@std@@v?$alloca...@d@2@@std@@abvlocationi...@spi@2@@Z) 1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall log4cxx::spi::LocationInfo::LocationInfo(char const * const,char const * const,int)" (__imp_??0locationi...@spi@log4cxx@@q...@qbd0h@Z) 1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: class log4cxx::Logger * __thiscall log4cxx::helpers::ObjectPtrT<class log4cxx::Logger>::operator->(void)const " (__imp_??c?$objectp...@vlogger@log4cxx@@@help...@log4cxx@@qbepavlog...@2@XZ) 1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall log4cxx::helpers::ObjectPtrT<class log4cxx::Logger>::~ObjectPtrT<class log4cxx::Logger>(void)" (__imp_??1?$objectp...@vlogger@log4cxx@@@help...@log4cxx@@u...@xz) 1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall log4cxx::helpers::ObjectPtrT<class log4cxx::Level>::~ObjectPtrT<class log4cxx::Level>(void)" (__imp_??1?$objectp...@vlevel@log4cxx@@@help...@log4cxx@@u...@xz) 1>C:\Documents and Settings\gerrit\My Documents\Visual Studio 2008\Projects\log4cxxStaticTest\Release\log4cxxStaticTest.exe : fatal error LNK1120: 12 unresolved externals

What am I doing wrong?

Here is the basic example:

#include <log4cxx/logger.h>

log4cxx::LoggerPtr  logger(log4cxx::Logger::getLogger("myLogger"));

void main(void) {
   LOG4CXX_WARN(logger, "Some warning");
}


- Gerrit

Reply via email to