草庐IT

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

coder 2023-11-12 原文

这让我抓狂,我正在尝试构建 log4cxx 库以便在我一直使用的 c++ 项目中使用。我在运行 VS2010 express c++ 版本的 win7 主机上。我已按照 log4cxx 说明 ( ) 的说明进行操作,包括下载 apr 和 apr-util 和 motifyying .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 一起工作:

  1. here 下载最新的 log4cxx 包
  2. here 下载 apr 和 apr-util ZIP 包
  3. 将 log4cxx、apr 和 apr-util 提取到同一目录
  4. 将 apr_VERSION 和 apr-util_VERSION 文件夹重命名为 apr 和 apr-util,生成一个包含三个文件夹的目录:apache-log4cxx-0.10.0、apr 和 apr-util
  5. 进入log4cxx目录,执行configure.bat
  6. 更改为 apr-util/include 目录并打开 apu.hw在您选择的文本编辑器中
  7. 找到条目 #define APU_HAVE_APR_ICONV , 设置为 0 并保存文件
  8. 打开apr_ldap.hw从同一目录中找到条目 #define APR_HAS_LDAP , 将其设置为 0 并保存文件。
  9. 切换到 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;
  • 如果编译器提示 insert_iterator 不在命名空间 std 中,请添加 #include <iterator>到源文件的包含部分。

  • 最后但同样重要的是,右键单击 log4cxx 项目并选择添加引用,然后选择其他 3 个项目作为引用


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

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

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

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

有关c++ - 在 vs 2010 c++ 中构建 log4cxx的更多相关文章

  1. ruby-on-rails - Railstutorial : db:populate vs. 工厂女孩 - 2

    在railstutorial中,作者为什么选择使用这个(代码list10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersnamespace:dbdodesc"Filldatabasewithsampledata"task:populate=>:environmentdoRake::Task['db:reset'].invokeUser.create!(:name=>"ExampleUser",:email=>"example@railstutorial.org",:passwo

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby - 在 Ruby 中构建长字符串的简洁方法 - 2

    在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo

  4. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  5. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  6. ruby - 使用 rbenv 和 ruby​​-build 构建 ruby​​ 失败,出现 undefined symbol : SSLv2_method - 2

    我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby​​2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby​​-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm

  7. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  8. ruby - Heroku production.log 文件位置 - 2

    我想在heroku.com上查看我的应用程序日志的内容,所以我关注了thisexcellentadvice并拥有我所有的日志内容。但是我现在很想知道我的日志文件实际在哪里,因为“log/production.log”似乎是空的:C:\>herokuconsoleRubyconsoleforajpbrevx.heroku.com>>files=Dir.glob("*")=>["public","tmp","spec","Rakefile","doc","config.ru","app","config","lib","README","Gemfile.lock","vendor","sc

  9. Ruby#index 方法 VS 二进制搜索 - 2

    给定一个元素和一个数组,Ruby#index方法返回元素在数组中的位置。我使用二进制搜索实现了我自己的索引方法,期望我的方法会优于内置方法。令我惊讶的是,内置的在实验中的运行速度大约是我的三倍。有Rubyist知道原因吗? 最佳答案 内置#indexisnotabinarysearch,这只是一个简单的迭代搜索。但是,它是用C而不是Ruby实现的,因此自然可以快几个数量级。 关于Ruby#index方法VS二进制搜索,我们在StackOverflow上找到一个类似的问题:

  10. += 的 Ruby 方法 - 2

    有没有办法让Ruby能够做这样的事情?classPlane@moved=0@x=0defx+=(v)#thisiserror@x+=v@moved+=1enddefto_s"moved#{@moved}times,currentxis#{@x}"endendplane=Plane.newplane.x+=5plane.x+=10putsplane.to_s#moved2times,currentxis15 最佳答案 您不能在Ruby中覆盖复合赋值运算符。任务在内部处理。您应该覆盖+,而不是+=。plane.a+=b与plane.a=

随机推荐