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.