APUE即Unix环境高级编程,本书中几乎所有的程序都包含一个apue.h的头文件,那如何配置这个apue.h呢?
官方地址:http://www.apuebook.com/apue3e.html
1、我们可以在src.3e.tar中下载,然后放到你的Linux桌面上(没桌面的,随意放吧)
2、解压下载的文件:
tar -zxvf src.3e.tar.gz3、进入解压后的目录:
cd apue.3e/4、编译:
make
以下是我用centos 32 6.5 make 最新版第三版的错误:
[u1@h1 apue.3e]$ make gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE -c -o rwlock.o rwlock.c gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE timedlock.c -o timedlock -L../lib -lapue -pthread -lrt -lbsd gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE barrier.c -o barrier -L../lib -lapue -pthread -lrt -lbsd /tmp/ccb9gvom.o: In function `thr_fn’: barrier.c:(.text+0x6e): undefined reference to `heapsort’ collect2: ld 返回 1 make[1]: *** [barrier] 错误 1 make[1]: Leaving directory `/home/albert/Documents/progs/apue.3e/threads’ make: *** [all] 错误 1 [u1@h1 apue.3e]$ 解决的方法: 1)ubuntu sudo apt-get install libbsd-dev 2) fedora, redhat, centos 2.1) 下载两个包 2.1a) i386 wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/i386/libbsd-0.6.0-1.el6.i686.rpm wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/i386/libbsd-devel-0.6.0-1.el6.i686.rpm 2.1b) x86_64 wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/x86_64/libbsd-0.6.0-1.el6.x86_64.rpm wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/x86_64/libbsd-devel-0.6.0-1.el6.x86_64.rpm
2.2)安装如上包,注意命令顺序,需要root权限 2.2a) i386 yum install libbsd-0.6.0-1.el6.i686.rpm yum install libbsd-devel-0.6.0-1.el6.i686.rpm 2.2b) x86_64 yum install libbsd-0.6.0-1.el6.x86_64.rpm yum install libbsd-devel-0.6.0-1.el6.x86_64.rpm2.3)然后继续编译apue [u1@h1 apue.3e]$make gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE -c -o asyncsocket.o asyncsocket.c gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE -c -o openmax.o openmax.c gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE -c -o sleep.o sleep.c gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE -c -o sleepus_poll.o sleepus_poll.c gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE -c -o sleepus_select.o sleepus_select.c gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE getpwsvr4.c -o getpwsvr4 -L../lib -lapue -pthread make[1]: Leaving directory `/home/u1/Documents/progs/apue.3e/exercises’ [[u1@h1 apue.3e]$$
此时应该成功了,我们把apue.h 与 libapue.a 放入到对应的目录中,用如下命令完成:
cp ./include/apue.h /usr/include/ cp ./lib/libapue.a /usr/local/lib/为什么要将libapue.a移到/usr/local/lib中呢?
原因是libapue.a是apue.h头文件中包含的所有函数及宏定义的具体实现,是一个静态链接库。
查看ld.conf.d/libc.conf你会发现gcc在搜索链接库的时候默认会去搜索/usr/local/lib/中的文件,所以我们将其放在这里,一劳永逸。。。。(不过自己要知道哦)
转载于:https://www.cnblogs.com/BinBinStory/p/7287688.html