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