GNU CoreUtils 命令源码重编译

来源:互联网 发布:淘宝波奇网 编辑:程序博客网 时间:2024/06/16 02:16

coreutils 是GNU下的一个软件包,包含linux下的 ls、pwd等常用命令。这些命令的实现要依赖于shell程序。
源码的下载地址可以到http://www.gnu.org/software/coreutils/这个网址下载;
我下载的版本是coreutils-8.27,在虚拟机ubuntu14.04下编译运行。

首先解压文件,进入coreutils-8.27目录,执行

./configure

进行环境配置,需要几分钟时间。
然后执行make命令,这一步会生成源程序中必需的一些头文件(如config.h).

然后进入src目录。
这里写图片描述

然后将你要重新改写的命令源程序
复制到一个文件夹下面,我放在了~/Desktop/GNU下,对其单独进行编译,需要将config.h等头文件目录软链接过来,否则编译会报错,预处理,运行:

gcc -E -I ~/Desktop/coreutils-8.27/lib/ -I ~/Desktop/coreutils-8.27/ -I ~/Desktop/coreutils-8.27/src -o pwd.i pwd.c

你需要修改你自己的对应的路径版本号、文件名。
编译运行:gcc -c pwd.i -o pwd.o
将预编译文件pwd.i编译成.o文件:-c参数告诉gcc将源代码编译成.o文件

链接静态库libcoreutils.a、动态库libcrypt.so,生成可执行文件pwd:

gcc -L ~/Desktop/coreutils-8.27/lib -L /usr.lib/pwd.o - o pwd -lcoreutils lcrypt

这样就OK了。

看一下文件
这里写图片描述

我在pwd(输出当前工作目录)程序里添加了一句输出hahahahahaha,正常运行这里写图片描述

编译之前,需要把源文件中所有关于Version内容的语句都注释掉,不然会报错,undefined reference to “Version”
,切记。或者你有更好的解决办法。

原创粉丝点击