log4cpp工程是静态链接库,log4cppDLL是动态链接库;log4cpp只有MS vc6的工程文件。但使用vs2003将dsp转换成vcproj之后编译的过程中会出现错误,
问题一:
报错error PRJ0019: 工具从"正在执行自定义生成步骤",详细可以查看其BuildLog.htm。
解决办法,将转换后的vcproj打开,需要手工修改,原来的倒数几行的如下内容,使用了错误的可执行文件路径和错误的双引号,请注意,有的人说需要把NTEventLogCategories.mc这个文件删掉,我在我的机子上验证了下,那个文件不能删,并且需要把下面的内容替换替换为后面的内容:
<FileConfiguration Name="Debug|Win32">
<Tool Name="VCCustomBuildTool" CommandLine="if not exist $(OutDir) md $(OutDir)
"$(DevEnvDir)../Tools/Bin/mc.exe" -h $(OutDir) -r $(OutDir) $(ProjectDir)../$(InputName).mc
"$(DevEnvDir)../../vc7/Bin/RC.exe" -r -fo $(OutDir)/$(InputName).res $(OutDir)/$(InputName).rc
"$(DevEnvDir)../../VC7/Bin/link.exe" /MACHINE:IX86 -dll -noentry -out:$(OutDir)/NTEventLogAppender.dll $(OutDir)/$(InputName).res"
Outputs="$(OutDir)/NTEventLogAppender.dll"/>
</FileConfiguration>
<FileConfiguration Name="Release|Win32">
<Tool Name="VCCustomBuildTool" CommandLine="if not exist $(OutDir) md $(OutDir)
"$(DevEnvDir)../Tools/Bin/mc.exe" -h $(OutDir) -r $(OutDir) $(ProjectDir)../$(InputName).mc
"$(DevEnvDir)../../vc7/Bin/RC.exe" -r -fo $(OutDir)/$(InputName).res $(OutDir)/$(InputName).rc
"$(DevEnvDir)../../VC7/Bin/link.exe" /MACHINE:IX86 -dll -noentry -out:$(OutDir)/NTEventLogAppender.dll $(OutDir)/$(InputName).res"
Outputs="$(OutDir)/NTEventLogAppender.dll"/>
</FileConfiguration>
替换为:
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
CommandLine="if not exist "$(OutDir)" md "$(OutDir)"
"$(DevEnvDir)../../VC98/Bin/mc.exe" -h "$(OutDir)" -r "$(OutDir)" "$(ProjectDir)"../"$(InputName)".mc
"$(DevEnvDir)Bin/RC.exe" -r -fo "$(OutDir)"/"$(InputName)".res "$(OutDir)"/"$(InputName)".rc
"$(DevEnvDir)../../VC98/Bin/link.exe" /MACHINE:IX86 -dll -noentry -out:"$(OutDir)"/NTEventLogAppender.dll "$(OutDir)"/"$(InputName)".res
"
Outputs="$(OutDir)/NTEventLogAppender.dll"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCustomBuildTool"
CommandLine="if not exist "$(OutDir)" md "$(OutDir)"
"$(DevEnvDir)../../VC98/Bin/mc.exe" -h "$(OutDir)" -r "$(OutDir)" "$(ProjectDir)"../"$(InputName)".mc
"$(DevEnvDir)Bin/RC.exe" -r -fo "$(OutDir)"/"$(InputName)".res "$(OutDir)"/"$(InputName)".rc
"$(DevEnvDir)../../VC98/Bin/link.exe" /MACHINE:IX86 -dll -noentry -out:"$(OutDir)"/NTEventLogAppender.dll "$(OutDir)"/"$(InputName)".res
"
Outputs="$(OutDir)/NTEventLogAppender.dll"/>
</FileConfiguration>
问题二:
问题:log4cppDLL项目编译时会报8个连接错误,提示符号std::_Tree找不到
解决方案:
将include/log4cpp/FactoryParams.hh文件中的
const_iterator find(const std::string& t) const;
修改为
const_iterator find(const std::string& t) const { return storage_.find(t); }
后重新编译
问题三:
问题:log4cppDLL项目编译时会报1个连接错误,提示符号log4cpp::localtime找不到
解决方案:
将src/localtime.cpp文件添加到项目中重新编译
问题四:
问题:log4cppDLL项目编译时找不到localtime_s找不到符号
解决方案:因为VS版本低,所以头文件time.h里面没有这个函数,打开src里面的文件Localtime.cpp,
修改为localtime_s(t, time);为
::tm* tmp = ::localtime(time);
memcpy(t, tmp, sizeof(::tm));
编译则通过;
问题五:
问题:编译testPattern工程时,提示找不到localtime符号
解决方案:log4cpp项目编译时,把src/localtime.cpp文件添加到项目的Source Files中;
把src/localtime.hh文件添加到项目的Header Files中重新编译;
log4cpp应用手册
1 下载log4cpp并解压。
2 打开/log4cpp-0.3.4b/msvc6/msvc6.dsw
编译log4cpp工程Release版。
3 将编译后的log4cpp.lib复制到VC的Lib目录中。
4 将头文件的目录log4cpp-0.3.4b/include/log4cpp/
复制到VC的Include目录.
(或者添加log4cpp-0.3.4b/include到VC的Include环境变量)
6 目标工程包含库
log4cpp.lib ws2_32.lib
(要选择库连接方式相同的库)