unix环境高级编程代码编译方法

本人最近在学习《unix环境高级编程》一书,首先碰到的就是书中代码编译不过的问题。
首先是书中大部分程序都包含头文件apue.h,这是作者为了减少书中程序长度而将大多数程序需要包含的系统头文件统一包含在apue.h中,这样程序只需包含apue.h即可。另外该文件包含作者提供的出错处理例程和一些封装函数的声明。

现将解决方法记录如下(本人平台是ubuntu14.4):
1.从网上下载书中程序源码包,下面提供两个下载地址:
(http://download.csdn.net/detail/lsw_ruc/668760,http://download.csdn.net/detail/tyronedong/577141)。

2.将下载下来的压缩包解压(位于目录 :/home/sar/Src/apue.2e.tar.gz)
cd /home/sar/Src (根据自已的实际存在目录进行修改)
tar -xzvf  apue.2e.tar.gz
这会在当前目录下生成apue.2e文件夹

3.进入该文件夹
cd apue.2e
该目录中有个检测机器平台的脚本systype.sh,需要有执行权限
chmod +x systype.sh
另外根据自已的机器平台修改相应的Make.defines.***文件,例如本人是linux平台,修改Make.defines.linux
中WKDIR=/home/sar/Src/apue.2e,即修改为源码文件的位置。

4.执行sudo make

5.把头文件apue.h放到/usr/include/中,以root用户操作以下命令
cp ./include/apue.h /usr/include
cp ./lib/libapue.a /usr/lib
chmod 644  /usr/include/apue.h

6.验证:
mv fig1.3 fig1.3.c
gcc fig1.3.c -o ls -lapue 

7.编译时出现的问题:
apue源码make:/usr/include/bits/timex.h:31:7: 错误:expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ be的解决方法 参考:
http://blog.csdn.net/muais/article/details/6885708

在我的机器上编译时,提示ARG_MAX未定义,可以这么修改。
在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096
打开apue.2e/threadctl/getenv1.c 和apue.2e/threadctl/getenv3.c,添加一行:
#include "apue.h"

你可能感兴趣的:(linux)