《Unix环境高级编程》笔记之——Apue源码编译(Ubuntu 12.04)

一、修改源码文件

cd apue.2e
vim Make.defines.linux

修改Make.defines.linux文件WKDIR=/home/sar/apue.2e为你apue.2e所在的路径WKDIR=/your path/apue.2e

cd apue.2e/std
vim linux.mk
修改linux.mk文件中所有的nawk为awk

接着返回到apue.2e目录下make

二、错误处理

/usr/include/i386-linux-gnu/bits/timex.h:31:7: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘.’ token
make[2]: *** [printd.o] Error 1
make[2]: Leaving directory `/home/mmk/Desktop/apue.2e/ipp'
make[1]: *** [linux] Error 1
make[1]: Leaving directory `/home/mmk/Desktop/apue.2e'
make: *** [all] Error 2
原因: status定义冲突

timex.h的第31行已经定义statusint status; /* clock command/status */

apue.2e/ipp/ipp.h中122行定义status:#define status u.st

解决方法:

1.修改apue.2e/ipp/ipp.h中的status为Status,接着make,出现如下错误:

gcc -DLINUX -ansi -I/home/Desktop/apue.2e/include -Wall -D_GNU_SOURCE -DDEBUG  -c -o printd.o printd.c
printd.c: In function ‘printer_status’:
printd.c:977:16: error: ‘struct ipp_hdr’ has no member named ‘status’
make[2]: *** [printd.o] Error 1
make[2]: Leaving directory `/home/mmk/Desktop/apue.2e/ipp'
make[1]: *** [linux] Error 1
make[1]: Leaving directory `/home/mmk/Desktop/apue.2e'
make: *** [all] Error 2

2.修改/apue.2e/ipp/printd.c第977行 i = ntohs(hp->status);为i = ntohs(hp->Status);,继续make,出现如下错误:

gcc -DLINUX -ansi -I/home/Desktop/apue.2e/include -Wall -D_GNU_SOURCE   -c -o getenv1.o getenv1.c
getenv1.c:4:20: error: ‘ARG_MAX’ undeclared here (not in a function)
getenv1.c:4:13: warning: ‘envbuf’ defined but not used [-Wunused-variable]
make[2]: *** [getenv1.o] Error 1
make[2]: Leaving directory `/home/mmk/Desktop/apue.2e/threadctl'
make[1]: *** [linux] Error 1
make[1]: Leaving directory `/home/mmk/Desktop/apue.2e'
make: *** [all] Error 2
错误原因:没有定义声明ARG_MAX

解决方法:

1.在apue.2e/include/apue.h中添加宏定义#define ARG_MAX 4096

2.在apue.2e/threadctl/getenv1和cgetenv3.c中添加#include "apue.h"

继续make,解决问题,OK




你可能感兴趣的:(APUE)