在vs c ++ c ++中构建log4cxx

时间:2011-12-11 00:53:21

标签: c++ visual-c++ log4cxx

这让我发疯,我正在尝试构建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.

由于

文件的路径正确。

4 个答案:

答案 0 :(得分:23)

您必须按照以下步骤使用log20cxx(版本0.10.0)与VS2010一起使用:

  1. here
  2. 下载最新的log4cxx软件包
  3. here
  4. 下载apr和apr-util ZIP包
  5. 将log4cxx,apr和apr-util解压缩到同一目录
  6. 将apr_VERSION和apr-util_VERSION文件夹重命名为apr和apr-util,从而生成一个包含三个文件夹的目录:apache-log4cxx-0.10.0,apr和apr-util
  7. 转入log4cxx目录并执行configure.bat
  8. 更改为apr-util / include direcotry并在您选择的发短信中打开apu.hw
  9. 找到条目#define APU_HAVE_APR_ICONV,将其设置为0并保存文件
  10. 从同一目录中打开apr_ldap.hw并找到条目#define APR_HAS_LDAP,将其设置为0并保存文件。
  11. 切换到log4cxx / projects目录并使用VS2010打开log4cxx.dsw。使用yes / ok回答VS2010的转换提示,每个项目(apr,apr-util,log4cxx,xml)
  12. 好的,如果你现在点击构建,那么你会看到大约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;
    
    • 如果编译器抱怨insert_iterator不在命名空间std中,请将#include <iterator>添加到源文件的include部分。

    • 最后但并非最不重要的是,右键单击log4cxx项目并选择Add References并选择其他3个项目作为参考


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

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

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

答案 1 :(得分:4)

人们已成功转换log4cxx分两步:

  • 原创(VS 6)至VS 2008
  • VS 2008至VS 2010

值得庆幸的是,有人在http://www.dreamcubes.com/webdrive/log4cxx_win32/log4cxx-0.10.0-vc2008-June2008.rar作为Visual Studio 2008项目提供了log4cxx 0.10。我已经使用VS 2010 Express成功构建了该项目。

答案 2 :(得分:4)

第1章正式步骤

我们将按照此处的步骤http://logging.apache.org/log4cxx/building/vstudio.html进行操作。但是,我们必须进行更改以适应windows / VS201 *。

  1. 从此处下载log4cxx的后续版本,即apache log4cxx 0.10,http://logging.apache.org/log4cxx/download.html

  2. https://archive.apache.org/dist/apr/

  3. 下载依赖项
  4. 官方建筑指南非常容易理解:

  5. 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
    
    1. 我建议您在开发者机器中安装gow,然后您将拥有许多类似unix / linux的工具,非常方便。或者如果你有git,你可以在你的环境中添加git cmd工具。
    2. configure
      configure-aprutil
      

      2 cmd以上需要sed.exe,在执行之前安装它(gow / git)。 或者您可以手动更改apu.hw和apr_ldap.hw:

      打开apr_ldap.hw并找到条目#define APR_HAS_LDAP,将其设置为0并保存文件。 打开apu.hw并找到条目#define APU_HAVE_APR_ICONV,将其设置为0并保存文件

      第2章构建Log4cxx

      1. 现在我们必须将* .dsw转换为* .cxproj。要使其顺利,只需启动Visual Studio 201 *并打开log4cxx.dsw。 VS会问你是否愿意改变一切。只需单击是。

      2. 将log4cxx设置为启动项目。

      3. 打开项目log4cxx的属性窗口,添加其他3个项目作为参考,在这里: 属性 - &gt;共同属性 - &gt;框架和参考文献。
      4. 点击F7,如果看到错误c2252,这是因为LOG4CXX_LIST_DEF定义错误,转到其定义并将其更改为
      5.   

        #define LOG4CXX_LIST_DEF(N, T) typedef std::vector<T> N

        像这样,

        旧:

        #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
        

        新:

        #define LOG4CXX_LIST_DEF(N, T) typedef std::vector<T> N
        
        1. 你会遇到另一个关于insert_iterator的错误,只需添加#include&lt;迭代&GT;到相对文件

        2. 完成!享受你的log4cxx!

答案 3 :(得分:0)

要使用Visual Studio 2015在Windows 7 64位上构建log4cxx,除了Scott的回答之外,我还需要做一些步骤,并做一些澄清。

  1. here下载最新的log4cxx(apache 0.10.0)ZIP包。
  2. here下载apr和apr-util ZIP包。
  3. 将log4cxx,apr和apr-util解压缩到同一目录。
  4. 从官方指示和seveves的回答: 将apr_VERSION和apr-util_VERSION文件夹重命名为apr和apr-util,从而生成一个包含三个文件夹的目录:apache-log4cxx-0.10.0,apr和apr-util
  5. 从Visual Studio命令行,cd到log4cxx目录并执行&#34; configure&#34;。如果您尝试将其用于下一步,则无法使用git bash shell。
  6. 下一个脚本需要sed,所以你有一些选择:
    • 按照其他答案中的说明手动编辑文件。
      • 转到apr-util / include目录并在您选择的texteditor中打开apu.hw。找到条目#define APU_HAVE_APR_ICONV,将其设置为0并保存文件。从同一目录打开apr_ldap.hw并找到条目#define APR_HAS_LDAP,将其设置为0并保存文件。
    • 从GNUWin32安装sed并将其添加到PATH中,然后运行&#34; configure-aprutil&#34;来自Windows命令提示符的log4cxx目录。
    • 运行&#34; configure-aprutil&#34;使用Windows git安装附带的sed。来自Git Bash提示符的log4cxx目录。
  7. 打开Visual Studio 2015.从项目目录中打开项目log4cxx.dsw。让Visual Studio转换它。
  8. 将log4cxx设置为启动项目,并检查其他3个项目是否显示为依赖项(右键单击 - &gt; Build Dependencies - &gt; Project Dependencies)
  9. 现在我有三个项目出现在&#34;(Visual Studio 2010)&#34;在他们旁边。由于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

    通过转到每个项目的属性并更改&#34;平台工具集&#34>来更改此设置。适用于Visual Studio 2015的所有配置。

  10. 解决方案现在配置为32位。转到Build&gt;配置管理器。将平台更改为x64。其中三个项目会改变,但log4cxx仍然会说Win32。单击它并转到新建...添加x64并取消选中&#34;创建新的解决方案平台&#34;。单击确定。确保&#34; Build&#34;检查所有4个项目。
  11. 如果您现在构建,您将看到c2252模板错误。打开log4cxx.h
    • 将包含"#if defined(_MSC_VER) && !defined(LOG4CXX_STATIC) && defined(LOG4CXX)"的行更改为"#if defined(_MSC_VER) && _MSC_VER < 1700 && !defined(LOG4CXX_STATIC) && defined(LOG4CXX)"
    • 将包含"#elif defined(_MSC_VER) && !defined(LOG4CXX_STATIC)"的行更改为"#elif defined(_MSC_VER) && _MSC_VER < 1700 && !defined(LOG4CXX_STATIC)"
  12. 下一个错误将是insert_iterator中的stringhelper.cpp。将#include <iterator>添加到该文件中。
  13. 然后出现链接错误:

    apr-1.lib(rand.obj) : error LNK2019: unresolved external symbol __imp__UuidCreate

    要解决此问题,请转到log4cxx属性&gt;链接器&gt;输入并添加rpcrt4.lib

  14. 现在解决方案应该构建,并且库将链接到您的64位应用程序。如果您只编辑一个,请重复调试/发布配置。

  15. (可选)解决方案不会添加常见的&#34; d&#34;调试库的后缀。要添加它,请打开Debug配置的Properties。转到链接器&gt;一般&gt;输出文件并重置为默认值。转到链接器&gt;高级&gt;导入库并重置为默认值。为Release配置执行此操作,以便它们将构建到相应的目录。仅对于Debug配置,请转到General,然后添加&#34; d&#34;在目标名称的末尾。