Linux世界分类的最新日记
RCS是CVS的前身,详情可见GNU网站 http://www.gnu.org/software/rcs/。RCS版本控制系统的Magic Keywords这一节中说明了rcsid的用法。
在BSD的代码中,一般读者都会发现在很多地方都会出现static char rcsid[] = “$FreeBSD … $”这样的字符串。
通常在BSD的代码中,前几行会有和rcsid字符串差不多的注释字符。和rcsid字符串一样,这些字串都是由CVS自动生成更新的,主要用来保存文件最后更改的时间、作者等信息。在文件首行加个注释很好理解,而将其放在字符串中则是为了在将文件编译为二进制文件之后依然可以保留这些信息。虽然现在BSD的代码都是用CVS管理了,但还是可以看到rcsid这东东。
现实的工程当中,当编译库文件的时候,我们发现系统下的文件已经变得不是很干净,到处是依赖的动态或者静态库的文件,那么,受污染的系统怎么保证编译的可执行文件或者库文件是正确的版本呢?这里rcsid就显得十分重要了。
一般创建个rcsid专有的宏文件rcsid.h,定义如下:
#if defined(NO_RCSID) || defined(lint)
#define RCSID(x) /* empty */
#elif __STDC__
/*
* This function is never called from anywhere, but it calls itself
* recursively only to fool gcc to not generate warnings :-).
*/
static const char *rcsid(const char *);
#define RCSID(x) static const char *rcsid(const char *s) { return rcsid(x); }
#else
#define RCSID(x) static char *rcsid(s) char *s; { return rcsid(x); }
#endif
然后在.cpp文件中引用这个头文件后,只要加入一行
RCSID("$Version: your version information $");
或使用:
static const char rcsid[] = "$Id: " __FILE__ ",v 1.0.0-0 " __DATE__ " " __TIME__ " Cnangel Exp $";
编译成二进制或库后,我们可以使用:
ident <二进制文件或库>
来检测二进制或库是否包含“your version information”的字样,从而确定你的二进制或库文件是正确的。
当然,这种方式也可以直接使用到Linux系统上哟。
在NetBSD中还可以看到__COPYRIGHT,它也有类似的作用,用what可以查看这个字符串。
exportfs和sshfs是两种不同的目录共享的方法。
exportfs是利用nfsd服务,而sshfs是使用sshd服务。
exportfs是linux系统默认安装的程序,而sshfs则需要辅助安装fuse软件才能完成sshfs的安装。
exportfs共享目录的方法如下:
在两台机器A/B中,A是被共享的机器,B是需要共享的机器;B要想使用A的共享目录资源/home/cnangel/cadev10,那么A机器需要做如下配置, 编辑/etc/exports文件:
sudo service nfs restart
然后在机器B上访问A的共享目录,在B机器上操作:
sudo mount -t nfs cnangel@A:/home/cnangel/cadev10 /mnt
然后进入/mnt目录,ls一下,看看是不是成功了?
而sshfs则非常简单,启动在机器A上启动sshd服务后,在机器B上操作:
exportfs是利用nfsd服务,而sshfs是使用sshd服务。
exportfs是linux系统默认安装的程序,而sshfs则需要辅助安装fuse软件才能完成sshfs的安装。
exportfs共享目录的方法如下:
在两台机器A/B中,A是被共享的机器,B是需要共享的机器;B要想使用A的共享目录资源/home/cnangel/cadev10,那么A机器需要做如下配置, 编辑/etc/exports文件:
/home/cnangel/cadev10 *(rw,sync)在机器A上启动nfs服务:
sudo service nfs restart
然后在机器B上访问A的共享目录,在B机器上操作:
sudo mount -t nfs cnangel@A:/home/cnangel/cadev10 /mnt
然后进入/mnt目录,ls一下,看看是不是成功了?
而sshfs则非常简单,启动在机器A上启动sshd服务后,在机器B上操作:
sudo sshfs cnangel@A:/ /mntLinux下访问共享目录如此简单,学会了么?
使用autoconf以来,的确带来了不少的方便之处,但是autoconf存在下面这样的一些问题。
查看全文: 关于build系统»
Distcc 介绍
- distcc是一个非常快且免费的分布式C/C++编译工具,distcc分为两个部分:
- distcc:distcc是一个类似客户端的程序,不过它的角色是个编译器,可以让C/C++代码在很多网络服务器上进行分布式的编译,就像本地编译一 样,当然比本地编译快很多。
- distccd:distccd是一个守护进程,每个网络服务器上都需要安装这个守护进程,用来处理distcc发送过来的各种计算资源。
- distccmon-text:distccmon-text是一个监控程序,用来监控编译的分布情况以及网络服务器编译使用情况。
- 安装了distcc后,所有的网络服务器不需要挂载同样一份文件系统,不需要服务器时间同步,也不要求同样的库文件或者头文件,甚至服务器之间可以允许不 同的处理器和操作系统。
Distcc 简单架构
Distcc 安装
- 在每台空闲的网络服务器上,下载distcc(目前到写完这篇文章为止,distcc最新版本为2.18.3),解压,编译安装如下:
~$ wget http://distcc.samba.org/ftp/distcc/distcc-2.18.3.tar.bz2
~$ tar -jxf distcc-2.18.3.tar.bz2
~$ cd distcc-2.18.3
~$ ./configure && make && sudo make install
- 在上面安装的distcc服务器上,启动distcc的daemon进程,还可以通过--allow选项指定网关的访问权限。
~$ sudo /usr/bin/distccd --daemon --allow 10.0.0.0/8 --user cnangel
- 环境变量设置,在所有的安装distcc的服务器上,执行:
~$ export DISTCC_HOSTS='10.20.137.1 10.20.137.2 10.20.137.3'
当然,为了保持变量值,可以将上述语句放入到$HOME/.bash_profile当中,另外,可以根据自己爱好不同,指定如下变量:
~$ export CC=distcc
~$ export CXX="distcc g++"
~$ alias make="make -j 4" (一般最好为服务器数的1.5倍最佳)
- 最后,可以尝试编译自己的工程了。
~$ cd ~/works/myproject; ./configure ; make
是不是比平常快了很多呢! :)
小结
- 具官方统计,在内核Linux2.4.19,单台CPU 1700MHz Pentium IV的机器使用distcc(v0.15)花费了6分45秒,而使用distcc在三台机器上(100Mbps)交叉编译,时间花费2分钟30秒,大概快 2.6倍左右 :)。
- 一般来说,使用distcc节省了很多的编译时间,对于编译时间长的大工程来说,是一个不错的选择。
