Ubuntu下,APUE2源码编译方法及单个源码编译的实现

2853阅读 0评论2011-05-10 gfvvz
分类:LINUX

APUE2源码网址: 

1. 修改Make.defines.linux文件中WKDIR为实际所存目录,我把apue.2e放在/opt/apue目录下,所以WKDIR=/opt/apue/apue.2e;
2. 用vim打开std目录下的linux.mk,即“vim ./std/linux.mk”将里面的nawk全部改为awk,可以使用这个命令“:%s/nawk/awk/g”  (注意前面有冒号);
3. 打开include目录下的apue.h,即“./include/apue.h”在最后一行 #endif  前面添加一行 #include "error.h"  (这一点非常重要,就是把 #include "erroc.h" 放在apue.h的倒数第二行);
4. 在我的机器上编译时,提示ARG_MAX未定义,可以这么修改。
在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096
打开apue.2e/threadtl/getenv1.c 和apue.2e/threadctl/getenv3.c,添加一行:
#include "apue.h";
5. make下,在apue.2e/lib/目录下生成所需libapue.a库。
6. 编译并运行书中第一个程序myls.c。
编译使用以下命令:
  1. gcc -o myls myls.c /opt/apue/apue.2e/lib/libapue.a
运行./myls /root | more (用more命令分页显示)
结果如下:
源码如下:
  1. #include "apue.h"
  2. #include <dirent.h>

  3. int main(int argc, char *argv[])
  4. {
  5.         DIR *dp;
  6.         struct dirent *dirp;

  7.         if(argc != 2)
  8.                 err_quit("usage: ls directory_name");

  9.         if((dp = opendir(argv[1])) == NULL)
  10.                 err_sys("can't open %s", argv[1]);
  11.         while((dirp = readdir(dp)) != NULL)
  12.                 printf("%s\n", dirp->d_name);

  13.         closedir(dp);

  14.         exit(0);

  15. }




上一篇:Linux驱动程序安装步骤(包括PC上及开发板上)
下一篇:Linux驱动程序第一步(LED控制)