Posted on 2007-08-03 01:13
ZelluX 阅读(2223)
评论(2) 编辑 收藏 所属分类:
C/C++
如果直接编译myls.c,会报错
/tmp/cceQcwN0.o: In function `main':
myls.c:(.text+0x24): undefined reference to `err_quit'
myls.c:(.text+0x5b): undefined reference to `err_sys'
collect2: ld 返回 1
需要下载随书附带的源代码并编译所需的库文件
源代码下载:http://www.blogjava.net/Files/zellux/apue.linux3.tar.Z.zip
(下载后去掉.zip后缀)
apue/README 文件中有具体的编译方法,对于Linux系统比较简单,进入lib.rhlin目录,然后运行make,就会在apue目录下生成libmisc.a,以后编译的时候连接这个库就行了。
以书中的第一个程序myls.c为例
#include <sys/types.h>
#include <dirent.h>
#include "ourhdr.h"
int main(int argc, char* argv[])
{
DIR *dp;
struct dirent *dirp;
if (argc != 2)
err_quit("a single argument (the directory name) is required");
if ( (dp = opendir(argv[1])) == NULL)
err_sys("can't open %s", argv[1]);
while ( (dirp = readdir(dp)) != NULL)
printf("%s\n", dirp->d_name);
closedir(dp);
exit(0);
}
$ gcc myls.c libmisc.a
出现几个Warning:
libmisc.a(strerror.o): In function `strerror':
strerror.c:(.text+0x18): warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead
strerror.c:(.text+0xf): warning: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead
看来这本书的确太老了
$ ./a.out .
就会列出当前目录下的所有文件