作者提供的编译方法的实现
README文件中给出的编译方法如下:
To build the source, edit the Make.defines.* file for your system and set WKDIR to the pathname of the tree containing the source code. Then just run "make". It should figure out the system type and build the source for that platform utomatically.
参照该方法,我将源码的编译分为三步。
第一步,编辑Make.defines.*文件。
由于我所使用的操作系统是linux-fedora,所以应该编辑文件Make.defines.linux。其实,编辑该文件的内容主要是修改其中的WKDIR,即我们源码所在文件夹的绝对路径名。原文件中WKDIR=/home/sar/apue.2e,我们可以根据我们实际文件夹所在的位置进行相应的修改。我的apue.2e文件夹放在/home/ajaxhe/Dropbox/UNIX/apue.2e下,所以我将WKDIR修改为WKDIR=/home/ajaxhe/Dropbox/UNIX/apue.2e。其余内容不用修改,保存修改后的文件。
第二步,通过su命令切换到超级用户。修改脚本文件systype.sh的权限。
由于原始的systype.sh文件不具有可执行的权限。通过执行命令:
#chmod u+x systype.sh
仅给当前用户添加可执行权限。
该脚本文件的功能主要是检测操作系统的类型。它可以检测到系统的类型有:FreeBSD,Linux,MacOS和Solaris等。如果单独执行这个shell脚本:
#./systype.sh
则输出结果为:linux。即检测本机的操作系统为linux。
以上文字摘自:http://blog.chinaunix.net/u2/72333/showart_1662235.html。对原文有改动
第三步,进行源码的编译。在命令行下执行make命令。
通过make命令是直接将所有的源程序编译成可执行文件的。然而,我的系统在编译的时候出现了错误,编译没有完全成功。值得庆幸的是在WKDIR/lib/(WKDIR=/home/ajaxhe/Dropbox/UNIX/apue.2e,下同)下生成了库文件libapue.a,有了这个库文件,后面就可以单个编译源文件了。
编译过程举例:
以WKDIR/下的fig1.3(实现ls部分功能)文件为例说明单独编译源文件的过程。
1.右键fig1.3文件图标,点击属性,可以看到该文件是指向WKDIR/file/ls1.c的一个符号连接,cd到WKDIR/file,修改ls1.c文件,将:
#include "apue.h"改成:#include "../include/apue.h"
即头文件apue.h的位置为父目录下inlucde文件夹中,这样就正确的指定了apue.h的位置。
2.在编译的时候加上库文件libapue.a,因为该文件实现了apue.h中的所有功能,主要有常用头文件,宏定义以及自定义函数的实现。
在终端中键入如下命令:
gcc -o ls1 ls1.c ../lib/libapue.a
3.生成可执行文件ls1,运行:
./ls1 /home
即可得到/home目录下的文件
ajaxhe
.
..
至此,APUE第二版作者提供的源码单独源码的编译方法已经实现