由于是第一个程序,环境没有配置好,报错如下:
myls.c:1:19: apue.h: No such file or directory
myls.c: In function `main':
myls.c:13: error: `NULL' undeclared (first use in this function)
myls.c:13: error: (Each undeclared identifier is reported only once
myls.c:13: error: for each function it appears in.)
看编译后的错误信息,原来是找不到头文件apue.h。
下载,APUE2源代码下载:http://www.apuebook.com/src.tar.gz
解压:解压缩:tar -xzvf src.tar.gz
将源代码解压后会出现目录apue.2e。将apue.2e下的include目录里面的apue.h文件拷贝至/usr/include。
cd apue.2e所在目录(如 /home/chen)
cd include
cp apue.h /usr/include
说明:因为还要一个文件下面会提到(马上,^_^) ,在最后一行#endif /* _APUE_H */前面添加一个声明:
#include "myerr.h"
再编译还是出问题:
/tmp/ccBBopm0.o(.text+0x2b): In function `main':
: undefined reference to `err_quit'
/tmp/ccBBopm0.o(.text+0x5f): In function `main':
: undefined reference to `err_sys'
collect2: ld returned 1 exit status
原来是找不到err_quit函数和err_sys函数的定义。
其实这两个函数在《unix环境高级编程》一书的附录B中可以找到。
在这里给出一种解决办法。
转到目录/usr/include,创建文件myerr.h。将下列代码添加至此文件:
复制:
cp myerr.h /usr/include
编译myls程序:
gcc -o myls myls.c
这次获得成功,运行:
./myls /usr
出现如下结果
22:04:09
参考:http://haoshuang3394.javaeye.com/blog/418327