coreutils学习——单独编译源码

来源:互联网 发布:阿里云cdn加速设置 编辑:程序博客网 时间:2024/05/29 15:15

1、源码编译通过:

为了这个源码编译,由于缺乏经验,弄了好久。。。下面把我的经验分享如下:

因为自己把APUE的各个章节算是看了一遍,想通过阅读别人写的代码提高自己的程序能力,网上很多人推荐了coreutils源码。coreutils源码是Linux下面很多小命令的一个集合,里面包含了像cp、mv、cat等命令的源码,因此相信无论是学习SHELL还是学习APUE都是不错的选择。

  • 源码的下载地址可以http://www.gnu.org/software/coreutils/这个网址下载;
  • 下载之后然后解压,可以看到文件夹(我这里是/home/ldh64103/coreutils)里面有configure文件,进入到文件夹里运行./configure;
  • 现在可以看到文件夹里面经过./configure之后生成了Makefile文件;
  • 运行make,这一步需要通过,因为很多源码需要的.h文件(如config.h)都是经过这一步之后生成的;
  • make install是安装程序,这里我们不需要安装。
  • 进入src里面,我们可以看到里面有很多我们以前熟悉命令的.c文件、.h文件和.o文件(经过汇编生成的文件)。
  • 我们复制cat.c文件到我们一个指定的目录(我这里是/tmp/cat);
  • 进入/tmp/cat目录;
  • 现在我们需要对cat.c文件进行单独编译;
  • 在这里犯了很大的错误:因为单独编译的时候直接:gcc cat.c -o cat;这样提示找不到config.h文件,然后网上各种搜解决方法,看到别人用软链接将config.h链接到autoconf.h文件上,各种改cat.c的#include,但是最后都没有解决;因为我不知道config.h是由运行./configure命令自动生成的,在/home/ldh64103/coreutils/lib目录下。原来人家的改符号链接是在编译内核和驱动的情况下使用的。
  • 运行gcc -E -I /home/ldh64103/coreutils -I /home/ldh64103/coreutils/lib -I /home/ldh64103/coreutils/src cat.c -o cat.i;(预处理)
  • 运行gcc -c cat.i -o cat.o;(编译)
  • 运行gcc -L /home/ldh64103/coreutils/lib/ -L /usr/lib cat.o -o cat -lcoreutils -lcrypt;(链接)  -lcoreutils 和 -lcrypt两个是连接两个动态库,两个文件的具体目录大家可以在命令行键入:find -name "libcoreutis.so" -print 来查找libcoreutils.so的目录,从而修改前面两个文件的相应搜索目录;
  • 但是运行的时候还没有通过,提示undefined reference to “Version”;这个还没有找到解决办法,我只能进入到cat.c文件当中把VERSION那行注释掉,这样最终才链接通过。这个问题只有等到将源码阅读一下才能知道怎么解决。
  • 源码还没阅读,现在只是编译通过,嘿嘿,继续加油!
参考博客:http://blog.csdn.net/endoresu/article/details/6967435 再次感谢这哥们。

0 0