log4cpp 相关的问题
来源:互联网 发布:模拟电路单片机 编辑:程序博客网 时间:2024/05/07 11:37
首先说编译:
一般如果用vs2005 vs2008 的人,就别用log4cpp1.0.x 的版本吧,vs2010的建议用最新的版本。
先说vs2008的编译问题:
这里网上很多的办法,都是一样的:
在 log4cpp-1.0/msvc6/ 下面 ,打开 msvc6.dsw 文件
右键工程属性,选择 Custom Build Step ,选择 Command Line ,修改如下
if not exist $(OutDir) md $(OutDir)
"mc.exe" -h $(OutDir) -r $(OutDir) $(SolutionDir)NTEventLogCategories.mc
"RC.exe" -r -fo $(OutDir)\$(InputName).res $(ProjectDir)\$(InputName).rc
"link.exe" /MACHINE:IX86 -dll -noentry -out:$(OutDir)\NTEventLogAppender.dll $(OutDir)\$(InputName).res
mc :进程设置信息。
rc : 资源设置信息。
link :链接设置信息。
右键工程属性,选择 Custom Build Step ,选择 Outputs ,修改如下
$(OutDir)\NTEventLogAppender.dll
之后 添加 FactoryParams.cpp 和 Localtime.cpp 两个文件。
这两个文件一般在 /log4cpp-1.0/src/ 下面。
添加文件后,编译OK。
其次 ,要说注意点 :
(1. 如果 只需要静态库的话,只需要编译log4cpp 工程就行了 。如果需要动态库,则 只需要编译log4cppdll 工程,编译以后包含一个 静态库和动态库
(2. 在使用的时候,debug 模式下 使用 一定使用 debug 下编译的 log4cpp | log4cppdll ,release 模式下 使用 一定使用 release 下编译的 log4cpp | log4cppdll
不然 在使用某些函数的时候会莫名的崩掉。(一定要注意,使用的时候,搞错过几次。)
(3. 第三点,就是如果使用配置文件的时候,注意log4cpp 里面进行加载文件的时候,这里传的相对路径,如果传的是绝对路径,log4cpp 是找不到的。
(特指1.0.x,高版本的不太清楚,没有使用。)
如果 在编译 log4cpp 的时候,有问题,就去掉 "link.exe" /MACHINE:IX86 -dll -noentry -out:$(OutDir)\NTEventLogAppender.dll$(OutDir)\$(InputName).res 里面 的 红色的部分。
经过 昨天晚上一晚上的尝试,发现并不是log4cpp 加载配置文件 不支持 绝对路径,而是 ,在vs2005 和vs 2008 下面 ,log4cpp 里面用 的是 std::ifstream 进行文件操作,而在vs2005、vs2008 里面 std::ifstream 初始化的时候 ,如果 传入的是 中文路径,就会有 问题 ,从而导致 ,log4cpp 在 加载 路径的时候 直接 找不到 该文件。
下面是 log4cpp 里面的源码 :
void PropertyConfiguratorImpl::doConfigure(const std::string& initFileName) throw (ConfigureFailure) {
// 在下面的 初始化的时候 ,出错。
std::ifstream initFile(initFileName.c_str());
if (!initFile)
{
throw ConfigureFailure(std::string("File ") + initFileName + " does not exist");
}
doConfigure(initFile);
}
解决 办法 :
可以修改log4cpp 里面的代码,进行重新编译,重新生成 dll 文件 。
解决 vs2008、vs2005 下 std::ifstream 初始化不支持 中文的办法 :
vs2008 、vs2005 下 std::ifstream 中不 支持 中文,是因为,在vs2008 、vs2005 下,默认 传入的 unicode 字符集 ,而我们一般开发的时候 大多数 使用的 多字节字符集,所以会导致 出错 。
1、使用C语言的函数设置为中文运行环境
2、使用STL函数设置为系统语言环境
3. 或者 直接 修改 log4cpp 的 参数,直接传入的是 宽字节 。
建议 :
用 vs 进行编码的时候 ,最好 使用 unicode 字符集编码 , 因为 在内部 中, 会先将 Multi-Byte Character 转换成 unicode 然后 才进行 操作,直接使用 unicode 进行编码 可以提高 应用软件的 速度。
- log4cpp 相关的问题
- 动态链接库dll和log4cpp的相关问题
- 最近使用dbci_ora和log4cpp时遇到的问题
- log4cpp的初探
- log4cpp的配置
- log4cpp的配置
- Log4cpp的使用
- log4cpp的介绍
- log4cpp的安装
- log4cpp库的使用
- log4cpp
- Log4cpp
- log4cpp
- Log4cpp
- log4cpp
- log4cpp的安装和使用
- 分享一个log4cpp的配置文件
- log4cpp 学习过程(四) ---- log4cpp在VS2003上的编译
- oracle查看,删除用户,用户权限
- MySQL定时器Events的使用方法及开启关闭
- 基于visual Studio2013解决C语言竞赛题之0413同构数
- OpenStack的架构详解
- [LeetCode]Binary Tree Level Order Traversal II,解题报告
- log4cpp 相关的问题
- unity3D 脚本中按键或鼠标输入响应函数
- perl 文件读写详细说明
- IOS开发笔记UIView使用animateWithDuration控制页面效果
- Linux下利用rpm包安装和使用mysql
- 经典SQL语句面试、开发必备
- 基于visual Studio2013解决C语言竞赛题之0414特殊平方数
- Android 开发一个简单的照相机程序
- SQL本地临时表EXEC问题