linux下《UNIX环境高级编程》(apue2)源码编译出错的处理方法

首先需要make一次源代码

编辑源码解压生成的apue.2e文件夹下的Make.defines.linux

修改WKDIR=/home/var/apue.2e为你的apue.2e目录,比如我的apue源码解压在/home/biye,那我就改为:

WKDIR=/home/biye/apue.2e

然后进入apue.2e/std 目录,编辑linux.mk。修改里面所有的nawk为awk。

最后返回apue.2e目录,执行make命令。

接下来就是编译书中出现的各种实例了:

以编译file文件夹下的ls1.c为例,以下是编译源码时的错误提示跟解决方法(假定你的工作目录跟我的一样,为/home/biye/apue.2e)

错误提示1:

ls1.c:1:19: apue.h: No such file or directory
ls1.c: In function `main':
ls1.c:13: error: `NULL' undeclared (first use in this function)
ls1.c:13: error: (Each undeclared identifier is reported only once
ls1.c:13: error: for each function it appears in.)

解决办法:

拷贝apue.h到系统默认头文件目录中

$cp /home/biye/apue.2e/include/apue.h /usr/include

错误提示2:

/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是作者自己定义的错误处理函数,需要单独定义头文件

在/usr/include 下新建一个名为myerr.h的文件

拷贝lib/error.c的内容到myerr.h(此头文件在原书的附录B中),然后保存,退出。

再次编辑ls1.c文件,在包含文件内加入#include"myerr.h"

重新编译通过后,执行./a.out /home/biye,结果如下:

猜你喜欢

转载自yesmeshtu2008-163-com.iteye.com/blog/1174002