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

来源:互联网 发布:淘宝网大童童装 编辑:程序博客网 时间:2024/06/14 16:04

一、修改源码文件

cd apue.2evim Make.defines.linux

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

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

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

二、错误处理

/usr/include/i386-linux-gnu/bits/timex.h:31:7: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘.’ tokenmake[2]: *** [printd.o] Error 1make[2]: Leaving directory `/home/mmk/Desktop/apue.2e/ipp'make[1]: *** [linux] Error 1make[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.cprintd.c: In function ‘printer_status’:printd.c:977:16: error: ‘struct ipp_hdr’ has no member named ‘status’make[2]: *** [printd.o] Error 1make[2]: Leaving directory `/home/mmk/Desktop/apue.2e/ipp'make[1]: *** [linux] Error 1make[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.cgetenv1.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 1make[2]: Leaving directory `/home/mmk/Desktop/apue.2e/threadctl'make[1]: *** [linux] Error 1make[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




0 0
原创粉丝点击