Ubuntu 搭建 APUE 环境:从源码编译到第一个示例跑通

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 系统编程的各个主题了。

相关推荐
IT小白杨1 小时前
市场调研的自动化访问,怎样控制节奏才不被误判?
运维·经验分享·安全·自动化·指纹浏览器
Zhou1411363 小时前
Docker_03_DockerCompose多容器编排
运维·docker·容器
shdkfbbv3 小时前
【无标题】
linux·运维·服务器
周洲08304 小时前
STM32片内Flash读写深度详解|掉电参数保存、底层原理
linux·前端·stm32
shimly1234564 小时前
比 find + grep 更好用的 nm + addr2line
linux
迷途之人不知返4 小时前
【进程控制】-3-进程等待
linux
_upupup4 小时前
包管理器和vim
linux·服务器
ESDWAN4 小时前
SD-WAN 企业选型与落地指南:从链路测试到网络架构设计
运维·网络·架构
一颗小树x4 小时前
NVIDIA 驱动故障排查实录:内核升级导致 nvidia-smi 失效
linux·服务器·nvidia驱动·启动失败·内核升级