linux下APUE的代码测试文件路径配置

1.APUE的代码(http://www.apuebook.com./)解压,比如路径是/home/zqk/apue.2e

2.按照README修改Make.defines.linux 中的WKDIR,改为WKDIR=/home/sar/apue.2e

3.make 。make后在lib文件夹中生成libapue.a

4把apue.h放到要编译的源代码相同目录下(因为编译的代码 #include "apue.h",也可以复制到/usr/include

5把alibapue.a放到要编译的源代码相同目录下,否则在gcc 或者cc 代码时,会报如下错误

undefined reference to `err_quit'

undefined reference to `err_sys' 

其实apue.h并不是系统自带的,而是作者编写的头文件,源代码在附录B.因此也可把刚才生成的/root/apue.2e/include/apue.h直接复制到/usr/include.
还有像err_syslog_sys的函数也在附录B.同样的方法是在/usr/include新建一个 my_err.h的文件,把程序清单 B.2. 输出至标准出错文件的出错处理函数和程序清单 B.3 用于守护进程的出错处理函数的内容复制进去.这样按例子编程就只需要在行首添加:#include "my_err.h"就可以了

 

6. 使用gcc -o hello hello.c libapue.a来编译源代码,生成hello,执行./hello 即可

   或者使用cc ls1.c libapue.a编译,生成a.out, 执行a.out即可。在编译的时候要加上库文件libapue.a,因为该文件实现了apue.h中的所有功能,主要有常用头文件,宏定义以及自定义函数的实现。

Linux环境下(以Ubuntu10.04为例)
在http://www.apuebook.com/下载src.tar.gz源代码的压缩包




1、解压至/home/user/目录下


2、修改 Make.defines.linux中的WKDIR=/home/xxx/apue.2e,改为
    WKDIR=/home/user/apue.2e


3、返回至apue.2e目录下面,修改linux.mk,将里面的nawk全部改为awk,可以使用这个
   命令 :%s/nawk/awk/g
   可能你的该目录(子目录)下的多个linux.mk不用修改,那么直接跳过这步
      
4、make
   若此步骤时出现错误: 如 getenv1.c:4: error: ‘ARG_MAX’ undeclared here
   时,请:
     编译apue.2e/include目录下的apue.h,添加
     #define ARG_MAX 4096
     一行,然后在 apue.2e/threadctl目录下的getenv1.c和getenv3.c文件中添加
     #include "apue.h"
     一行
   至此,应该可以顺利编译.
 
5、将/home/user/apue.2e/include/apue.h和/home/user/apue.2e/lib/error.c复制到/usr/include目录下
   cp /home/user/apue.2e/include/apue.h /home/user/apue.2e/lib/error.c /usr/include
   
6、cd 到目录apue.2e/lib下
    ranlib libapue.a
   然后拷贝这个.a文件到/usr/lib/apue目录下 (没有apue目录则新建一个)
   cp /home/usr/apue.2e/lib/libapue.a /usr/lib/apue/
   
7、编译你的源文件,如 print_thread_id.c
    gcc -o print_thread_id print_thread_id.c -lpthread -L /usr/lib/apue -lapue

你可能感兴趣的:(LINUX学习笔记)