[prev in list] [next in list] [prev in thread] [next in thread] 

List:       log4cxx-user
Subject:    Re: linking errors when trying to use log4cxx as a static library (VC2008)
From:       Curt Arnold <carnold () apache ! org>
Date:       2009-05-30 0:38:45
Message-ID: AECB5F0D-4BB3-43B4-9188-FB82F19A467D () apache ! org
[Download RAW message or body]


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_?getWarn@Level@log4cxx@@SA?AV? 
> $ObjectPtrT@VLevel@log4cxx@@@helpers@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_? 
> str@MessageBuffer@helpers@log4cxx@@QAEABV?$basic_string@DU? 
> $char_traits@D@std@@V?$allocator@D@2@@std@@AAVCharMessageBuffer@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.

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic