On May 29, 2009, at 12:09 PM, Gerrit van Doorn wrote:

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_? s...@messagebuffer@help...@log4cxx@@qaeabv?$basic_str...@du? $char_tra...@d@std@@v?$alloca...@d@2@@std@@aavcharmessagebuf...@23@@Z)

...
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


Notice that your link errors have __declspect(dllimport) which indicates that your calling code is still expecting to link with a log4cxx.dll. Likely, you did not define LOG4CXX_STATIC when you compiled your application.

Reply via email to