July 2012 Archives

valgrind and throw exception

在C++的代码段中,使用了throw来抛出异常,这是一种非常不好的方法。

log4cpp 1.1.0 patch

改进特征:
1,可扩展的队列接口;
2,可根据时间分卷的Appender;
另外,log4cpp 1.1rc1修复了以前可变参数的问题(会产生coredump)
[cnangel@localhost SOURCES]$md5sum log4cpp-1.1rc1.tar.gz
d79d8b20d429aa799ead24254ba68d5a  log4cpp-1.1rc1.tar.gz
patch补丁:
0001-update-for-cnangel.patch

在Fedora17 i386平台(gcc4.7),使用rpm打包发现一个问题,so文件不包含__atomic_fetch_add_4的符号定义,类似
src/foo/.libs/libfoo.so: undefined reference to `__atomic_fetch_add_4'
提示缺失的符号定义,但是实际上我们已经做了链接,是什么情况导致这个现象呢?通过调试发现在configure之前,rpmbuild做了以下事情:
+ CFLAGS='-O2 -g -march=i386 -mtune=i686'
+ export CFLAGS
+ CXXFLAGS='-O2 -g -march=i386 -mtune=i686'
+ export CXXFLAGS
+ FFLAGS='-O2 -g -march=i386 -mtune=i686'
+ export FFLAGS
定义了build的一系列环境变量,而这个是导致缺失符号定义的最终祸首,具体说是C++标准有变化,C++0x11旧的标准和新标准存在着不一致导致,详情可见http://redmine.openrtm.org/issues/2453,解决办法也很简单,在spec文件的%build段,修改
%configure

%configure CFLAGS="-g -O2" CXXFLAGS="-g -O2"
即可。

openssh and X11 forwarding

一般客户端通过ssh获得可视化的窗口,可以在ssh命令后面加上选项-X或-Y,但是并不是所有的主机都支持可视化,需要在主机上修改/etc/ssh/sshd_config文件:
X11Forwarding yes
若不想影响到所有的用户,也可以对某个用户设置,修改$HOME/.ssh/config文件
Host remotehost
ForwardX11 yes
但在CentOS6.2系统中,会提示:
debug1: Requesting X11 forwarding with authentication spoofing.
debug1: Remote: No xauth program; cannot forward with spoofing.
说明没有X的认证库,需要安装:
yum install xorg-x11-xauth
即可。



因为特殊需求测试,需要将系统时间改到以前某个时间,但是笔者又不想修改当前的系统,于是用virtualbox弄了一个虚拟操作系统,但是仍然无法修改时间,时间与物理机器仍然同步,修改虚拟机器硬件时间,结果直接修改了物理机器的硬件时间,郁闷了。

通过ntpdate修正了物理机器,Google一下,这个是安装了增强包导致的,只需要在物理机器上运行:
VBoxManage setextradata <vmname> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"
即可,记得要先关闭虚拟机哟!

有一位强悍的哥们还直接关闭时间同步的通信通道,详情可见:
http://www.ideaexcursion.com/2008/08/19/synchronize-a-virtualized-domain-controller-with-external-time-servers/