目前可供下载的log4cpp源代码只提供了支持使用vc6编译方式,在将此版本的程序升级到2005的过程中会产生一些错误,下面将这些错误的解决方式中介如下。
1、在使用vs2005打开log4cpp工程时,会有类似于“需要将工程转化到2005 solution”的警告窗口弹出,点击yes后,在接下来打开solution的过程中会有某些project无法加载的错误窗口弹出,直接点击OK。 因为这些无法加载的project都是测试程序,对生成log4cpp的库文件没有影响,在solution打开后可以直接将这些project 从solutions中删除。
2、在编译生成库文件的时候会有类似于custom build error的错误产生,这是因为NTEventLogCategories.mc的编译规则中使用的工具默认是在vc98目录下,而这个目录是不存在的, 解决方式就是,直接将mc.exe,rc.exe,link.exe前面的路径前缀去掉,这样就使程序自动使用vs2005版的相应的工具。
3、链接产生动态库文件时会有大量的如下的错误信息,这些是因为连接时找不到符号地址,解决方式就是将FactoryParams.cpp和Localtime.cpp加入工程即可。
1>PatternLayout.obj : error LNK2001: unresolved external symbol "public: class std::_Tree<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >,0> >::const_iterator __thiscall log4cpp::FactoryParams::find(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)const " (?find@FactoryParams@log4cpp@@QBE?AVconst_iterator@?$_Tree@V?$_Tmap_traits@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@std@@@2@$0A@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@5@@Z)
1>PatternLayout.obj : error LNK2019: unresolved external symbol "void __cdecl log4cpp::localtime(__int64 const *,struct tm *)" (?localtime@log4cpp@@YAXPB_JPAUtm@@@Z) referenced in function "public: virtual void __thiscall log4cpp::TimeStampComponent::append(class std::basic_ostringstream<char,struct std::char_traits<char>,class std::allocator<char> > &,struct log4cpp::LoggingEvent const &)" (?append@TimeStampComponent@log4cpp@@UAEXAAV?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABULoggingEvent@2@@Z)