1. 引言
《UNIX 环境高级编程》(Advanced Programming in the UNIX Environment,简称 APUE)是学习 Unix/Linux 系统编程的经典书籍。书中所有示例代码都依赖作者提供的 libapue 库,因此动手实践的第一步,就是在自己的机器上把这本书的配套环境搭建起来。
本文以 Ubuntu 为例,从安装依赖、获取源码、编译库,到跑通第一个示例,一步步带你完成 APUE 环境的搭建。
2. 准备工作
2.1 确认系统版本
建议使用 Ubuntu 20.04 或更高版本。可以通过以下命令查看系统信息:
bash
lsb_release -a
2.2 安装编译工具链
APUE 源码需要 gcc、make 等工具,以及 libbsd-dev(部分版本需要)。执行:
bash
sudo apt update
sudo apt install -y build-essential libbsd-dev
如果后续编译报缺少头文件,再按提示补充安装对应开发包。
3. 获取 APUE 源码
APUE 第三版(对应书中的 apue.3e)源码托管在 GitHub 上,克隆到本地:
bash
git clone https://github.com/stevenschmidt/apue.3e.git
cd apue.3e
说明:仓库名中的
stevenschmidt是社区维护的镜像,与官方源码一致。你也可以使用其他可信镜像。
4. 编译 libapue 库
APUE 的示例代码都链接到 libapue.a 静态库,需要先编译它。
4.1 修改 Make.defines
进入源码目录后,先查看 Make.defines 文件,确认平台相关配置:
bash
cat Make.defines
通常无需修改即可直接编译。若编译报错,检查 WKDIR 是否指向当前源码目录。
4.2 编译库
在源码根目录执行:
bash
make
该命令会编译 libapue.a 以及各章节的示例程序。编译完成后,确认库文件已生成:
bash
ls lib/
应能看到 libapue.a。
5. 编译并运行第一个示例
以第一章的 ls 示例为例,验证环境是否可用。
5.1 进入示例目录
bash
cd intro
5.2 编译示例
bash
make ls1
5.3 运行
bash
./ls1 /
如果能看到根目录的文件列表,说明 APUE 环境搭建成功。
6. 常见问题排查
6.1 编译报错:apue.h: No such file or directory
说明头文件路径未配置。检查 Make.defines 中的 INCDIR 是否指向源码根目录,必要时手动指定:
bash
gcc -I../include -L../lib -lapue -o ls1 ls1.c
6.2 链接报错:undefined reference to 'err_quit'
说明 libapue.a 未正确链接。确认编译命令中包含 -L../lib -lapue。
6.3 缺少 libbsd 相关符号
安装 libbsd-dev 后重新编译:
bash
sudo apt install -y libbsd-dev
make clean && make
7. 小结
至此,你已经在 Ubuntu 上完成了 APUE 环境的搭建:
- 安装了编译工具链与依赖;
- 获取了 APUE 第三版源码;
- 编译生成了
libapue.a静态库; - 成功编译并运行了第一个示例程序。
接下来就可以对照书中章节,逐个编译运行示例,深入理解 Unix 系统编程的各个主题了。