This is driving me crazy, I\'m trying to building the log4cxx library in order to use in a c++ project I\'ve been using. I\'m on a win7 host running VS2010 express c++ editi
You have to follow these steps to get log4cxx (Version 0.10.0) working with VS2010:
apu.hw
in a texteditor of your choice#define APU_HAVE_APR_ICONV
, set it to 0 and save the fileapr_ldap.hw
from the same directory and find the entry #define APR_HAS_LDAP
, set it to 0 and save the file, too.Ok if you hit build now then you will see around 2000 errors and that is where the interesting and "hard" part starts:
Some examples:
// telnetadapter.h
...
typedef log4cxx::helpers::SocketPtr Connection;
LOG4CXX_LIST_DEF(ConnectionList, Connection);
class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
...
// appender.h
...
class Appender;
LOG4CXX_PTR_DEF(Appender);
LOG4CXX_LIST_DEF(AppenderList, AppenderPtr);
class Layout;
typedef log4cxx::helpers::ObjectPtrT<Layout> LayoutPtr;
...
class LOG4CXX_EXPORT Appender :
public virtual spi::OptionHandler
{
...
Example:
// old
LoggingEvent::KeySet set;
// new
KeySet set;
If the compiler complains about insert_iterator not being in the namespace std, add #include <iterator>
to the include section of the source file.
Last but not least, right-click on log4cxx project and select Add References and select the other 3 projects as reference
Hope this helps you and some others :) ... if you need the whole solution or other files, let me know!
I figured out these steps with the enormous help of this blog entry by Lex LI.
EDIT: You can download my VS2010 solution and source code from my dropbox: https://www.dropbox.com/s/rn5d0044jzgzwyf/log4cxx_vs2010.7z
To build log4cxx on Windows 7 64-bit with Visual Studio 2015, I had to do a few steps in addition to Scott's answer, and have some clarifications.
Now I had three of the projects showing up with "(Visual Studio 2010)" next to them. This caused a link error later due to changes in stdio:
4>apr-1.lib(start.obj) : error LNK2001: unresolved external symbol __imp__wenviron
4>apr-1.lib(start.obj) : error LNK2001: unresolved external symbol __imp__environ
4>apr-1.lib(filedup.obj) : error LNK2019: unresolved external symbol __imp___iob_func referenced in function apr_file_dup2
Change this by going to the Properties for each project and changing the "Platform Toolset" for all configurations to Visual Studio 2015.
"#if defined(_MSC_VER) && !defined(LOG4CXX_STATIC) && defined(LOG4CXX)"
to "#if defined(_MSC_VER) && _MSC_VER < 1700 && !defined(LOG4CXX_STATIC) && defined(LOG4CXX)"
."#elif defined(_MSC_VER) && !defined(LOG4CXX_STATIC)"
to "#elif defined(_MSC_VER) && _MSC_VER < 1700 && !defined(LOG4CXX_STATIC)"
.insert_iterator
in stringhelper.cpp
. Add #include <iterator>
to that file.Then there is a link error:
apr-1.lib(rand.obj) : error LNK2019: unresolved external symbol __imp__UuidCreate
To fix this, go to log4cxx Properties > Linker > Input and add rpcrt4.lib
Now the solution should build and and the library will link to your 64-bit application. Repeat for Debug/Release configurations if you were only editing one.
People have successfully converted log4cxx in 2 steps:
Thankfully, someone has made log4cxx 0.10 available as a Visual Studio 2008 project at http://www.dreamcubes.com/webdrive/log4cxx_win32/log4cxx-0.10.0-vc2008-June2008.rar. I've built the project successfully with VS 2010 Express.
Chapter 1 Official Steps
We are going to follow the steps here, http://logging.apache.org/log4cxx/building/vstudio.html. However, we must make changes to adapt to windows/VS201*.
download later version of log4cxx which is apache log4cxx 0.10 from here, http://logging.apache.org/log4cxx/download.html
download dependencies from https://archive.apache.org/dist/apr/
The official building guideline is quite easy to follow:
unzip apr-1.2.11-win32-src.zip rename apr-1.2.11 apr unzip apr-util-1.2.10-win32-src.zip rename apr-util-1.2.10 apr-util cd apache-log4cxx-0.10.0 configure configure-aprutil
configure configure-aprutil
above 2 cmd requires sed.exe, install it (gow/git) before execute them. or you can change apu.hw and apr_ldap.hw manually:
Open apr_ldap.hw and find the entry #define APR_HAS_LDAP, set it to 0 and save the file, too. Open apu.hw and find the entry #define APU_HAVE_APR_ICONV, set it to 0 and save the file
Chapter 2 Building Log4cxx
Now we have to convert *.dsw to *.cxproj. To make it smooth, just launch Visual Studio 201* and open log4cxx.dsw. VS will ask if you like to convert everything. Simply click Yes.
Set log4cxx as startup project.
#define LOG4CXX_LIST_DEF(N, T) typedef std::vector<T> N
like this,
old:
#define LOG4CXX_LIST_DEF(N, T) \ template class LOG4CXX_EXPORT std::allocator<T>; \ template class LOG4CXX_EXPORT std::vector<T>; \ typedef std::vector<T> N
new:
#define LOG4CXX_LIST_DEF(N, T) typedef std::vector<T> N
and u will meet another err about insert_iterator, simply add #include< iterator> to relative file
Done! enjoy your log4cxx!