这让我发疯,我试图构建log4cxx库以便在我一直在使用的c++项目中使用。我在运行VS2010 Express C++版本的Win7主机上。我已按照每个log4cxx指示()的指示进行操作,包括下载apr
和apr-util并修饰.hw文件,但不幸的是,每当我尝试加载log4cxx.dsw解决方案并将其转换为当前VS时,尝试构建apr.apr / dsw和一堆错误时都会收到错误消息其他相关的.dsw文件。有什么建议么?

具体来说,我看到的是:

The Project file 'C:\...projects\apr-util\xml\expat\lib\xml.dsp' cannot be loaded. Do you want to remove the unloadable project from the solution?

我看到了一堆其他的.dsp文件。

然后在VC的输出框中:
C:\Users\x\Documents\Visual Studio 2010\Projects\apr\apr.dsp : error  : Project upgrade failed.

C:\Users\x\Documents\Visual Studio 2010\Projects\apr-util\xml\expat\lib\xml.dsp : error  : Project upgrade failed.

C:\Users\x\Documents\Visual Studio 2010\Projects\apr-util\aprutil.dsp : error  : Project upgrade failed.

C:\Users\x\Documents\Visual Studio 2010\Projects\apache-log4cxx-0.10.0\projects\log4cxx.dsp : error  : Project upgrade failed.

谢谢

文件位于正确的路径中。

最佳答案

您必须按照以下步骤操作,以使log4cxx(0.10.0版)与VS2010一起使用:

  • here下载最新的log4cxx软件包
  • here下载apr和apr-util ZIP软件包
  • 将log4cxx,apr和apr-util提取到同一目录
  • 将apr_VERSION和apr-util_VERSION文件夹重命名为apr和apr-util,导致目录包含三个文件夹:apache-log4cxx-0.10.0,apr和apr-util
  • 切换到log4cxx目录并执行configure.bat
  • 更改为apr-util / include direcotry并在您选择的文本编辑器中打开apu.hw
  • 查找条目#define APU_HAVE_APR_ICONV,将其设置为0并保存文件
  • 从同一目录中打开apr_ldap.hw并找到条目#define APR_HAS_LDAP,将其设置为0并保存文件。
  • 转到log4cxx / projects目录,并使用VS2010打开log4cxx.dsw。对每个项目(apr,apr-util,log4cxx,xml),用yes / ok回答VS2010的转换提示

  • 好吧,如果您现在点击构建,那么您将看到大约2000个错误,这是有趣且“困难”的部分开始的地方:
  • Ctrl + F并找到“LOG4CXX_LIST_DEF”宏的每个条目。您必须将这些条目移出其相关类,并移到同一类之前。有时您也需要移动typedef或在宏之前添加类。

  • 一些示例:
        // 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
        {
        ...
    
  • 如果编译器抱怨KeySet不是LoggingEvent的成员,则只需删除作用域(由于在上一步中将类型移到类之外,所以这些类型不再在类内部)

    示例:
       // old
       LoggingEvent::KeySet set;
       // new
       KeySet set;
    
  • 如果编译器抱怨在 namespace std中没有insert_iterator,则将#include <iterator>添加到源文件的include部分。
  • 最后但并非最不重要的一点是,右键单击log4cxx项目并选择Add References,然后选择其他3个项目作为引用

    希望这对您和其他人有帮助:) ...如果您需要整个解决方案或其他文件,请告诉我!

    我在Lex LI的this博客条目的巨大帮助下找到了这些步骤。

    编辑:
    您可以从我的保管箱下载我的VS2010解决方案和源代码:
    https://www.dropbox.com/s/rn5d0044jzgzwyf/log4cxx_vs2010.7z

    关于c++ - 在vs 2010 C++中构建log4cxx,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12149453/

    10-13 06:29