C++ e目录并在您选择的文本编辑器中打开apu.hw。找到条目#define APU_HAVE_APR_ICONV,将其设置为0并保存文件。从同一目录打开apr_ldap.hw并找到条目#define apr_HAS_ldap,将其设置为0并保存文件 从GNUWin32安装sed并将其添加到路径中,然后从Windows命令提示符下的log4cxx目录运行“configure aprutil” 通过在git Bash提示符下从log4cxx目录运行“configure aprutil”,使用Windows git安装附带的sed 打开Visual Studio 2015。从项目目录中打开项目log4cxx.dsw。让VisualStudio转换它 将log4cxx设置为启动项目,并检查其他3个项目是否显示为依赖项(右键单击->构建依赖项->项目依赖项)

C++ e目录并在您选择的文本编辑器中打开apu.hw。找到条目#define APU_HAVE_APR_ICONV,将其设置为0并保存文件。从同一目录打开apr_ldap.hw并找到条目#define apr_HAS_ldap,将其设置为0并保存文件 从GNUWin32安装sed并将其添加到路径中,然后从Windows命令提示符下的log4cxx目录运行“configure aprutil” 通过在git Bash提示符下从log4cxx目录运行“configure aprutil”,使用Windows git安装附带的sed 打开Visual Studio 2015。从项目目录中打开项目log4cxx.dsw。让VisualStudio转换它 将log4cxx设置为启动项目,并检查其他3个项目是否显示为依赖项(右键单击->构建依赖项->项目依赖项),c++,visual-c++,log4cxx,C++,Visual C++,Log4cxx,现在我有三个项目出现在它们旁边的“(VisualStudio2010)”。由于stdio中的更改,这导致了一个链接错误: 4>apr-1.lib(start.obj):错误LNK2001:未解析的外部符号 4> apr-1.lib(start.obj):错误LNK2001:未解析的外部符号\uuu imp\uu环境 4> apr-1.lib(filedup.obj):错误LNK2019:函数apr\u file\u dup2中引用的未解析外部符号 通过转到每个项目的属性并将所有配置的“平台工具集

现在我有三个项目出现在它们旁边的“(VisualStudio2010)”。由于stdio中的更改,这导致了一个链接错误:

4>apr-1.lib(start.obj):错误LNK2001:未解析的外部符号
4> apr-1.lib(start.obj):错误LNK2001:未解析的外部符号\uuu imp\uu环境
4> apr-1.lib(filedup.obj):错误LNK2019:函数apr\u file\u dup2中引用的未解析外部符号

通过转到每个项目的属性并将所有配置的“平台工具集”更改为Visual Studio 2015来更改此设置

  • 解决方案现在配置为32位。转到构建>配置管理器。将平台更改为x64。其中三个项目将改变,但log4cxx仍然表示Win32。单击该按钮并转到“新建…”。。。添加x64并取消选中“创建新的解决方案平台”。单击“确定”。确保选中了所有4个项目的“构建”
  • 如果您现在构建,您将看到c2252模板错误。打开log4cxx.h
    • 将包含
      “#if defined(_MSC_VER)和&!defined(LOG4CXX_STATIC)和&defined(LOG4CXX)”的行更改为
      “#if defined(_MSC_VER)和&!defined(LOG4CXX静态)和&defined(LOG4CXX)”
    • 将包含
      “#elif defined(#MSC_VER)和&!defined(LOG4CXX_STATIC)”的行更改为
      “#elif defined(#MSC_VER)和&&!defined(LOG4CXX_STATIC)”
  • 下一个错误是关于
    stringhelper.cpp
    中的
    insert\u iterator
    。将
    #include
    添加到该文件中
  • 然后出现链接错误:

    apr-1.lib(rand.obj):错误LNK2019:未解析的外部符号\uuuu imp\uuuuuIdCreate

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

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

  • (可选)该解决方案不会向调试库添加通用的“d”后缀。要添加它,请打开调试配置的属性。转到链接器>常规>输出文件并重置为默认值。转到链接器>高级>导入库并重置为默认值。对发布配置也要这样做,以便它们将构建到相应的目录。仅对于调试配置,请转到“常规”,并在目标名称的末尾添加一个“d”

  • log4cxx是一个死项目吗?@seveves你好,你能重新上传源代码吗?比2010年晚一点的Visual Studio怎么样?有没有更简单的方法?谢谢你的回答。你还记得链接更新后使用的apr和apr util的正确版本吗?@AndreaRossi我使用的是apr 1.5.2和apr util 1.5.4汉克斯。你能分享这个项目的源代码吗?
    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?
    
    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.
    
        // 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
        {
        ...
    
       // old
       LoggingEvent::KeySet set;
       // new
       KeySet set;
    
    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
    
    #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