环境:ubuntu18.04(有root权限)
1.下载源代码
第三版:http://www.apuebook.com/code3e.html
2.上传到服务器(ubuntu)
解压
tar -xvf apue.3e.tar.gz
进入目录
cd apue.3e
3.下载依赖
sudo apt install libc6-dev
sudo apt-get install libbsd-dev
4.尝试make
make
遇到错误,没有权限
给文件赋予权限
chmod 755 systypes.sh
chmod 755 advio/fixup.awk
make 有两个操作 一个是编译make all 一个是清除编译make clean
最好在上一次没有编译成功后使用make clean
5.编译成功后 安装apue.h以及对应的静态链接库libapue.a
sudo cp include/apue.h /usr/include/
sudo cp lib/libapue.a /usr/local/lib/
可以看到,我们拷贝一个apue.h文件到用户包含目录,还拷贝了一个libapue.a到库目录,其中libapue.a是apue.h头文件中包含的所有函数及宏定义的具体实现的一个静态链接库.
6.测试
这里用的是书中的第一个代码,查看目录下文件指令ls的实现
myls.c
//ls 实现
#include "apue.h"
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
if(argc != 2)
err_quit("usage: Is directory_name");
if((dp = opendir(argv[2])) == NULL)
err_sys("can't open %s", argv[1]);
while((dirp = readdir(dp)) != NULL)
printf("%s\n",dirp->d_name);
closedir(dp);
exit(0);
}
编译:其中myapue-address可替换为自己的apue目录
gcc -o myls myls.c -I myapue-address/include/ -L myapue-address/lib/ -lapue
或者
gcc -c myls.c -o myls.o -lapue
./myls /home/
我这边出现了segementation fault(core dumped),说是访问的内存超过了给这个程序的内存空间。
(加更)gdb调试
gdb对于linux编程来说是一个非常方便的调试工具。
安装:
sudo apt-get install gdb
进入gdb调试 加上参数-g
gcc -g myls -c myls.c -lapue
进入调试界面
gdb
调试参数
l:显示代码
b: 设置断点
r: 开始调试
n: 下一步
c: 继续执行
quit: 退出