操作环境:RHEL7.0
部署apue.h实例运行环境
1.下载头文件src.3e.tar.gz
2.解压
tar zxvf src.3e.tar.gz
3.创建普通用户(我仿照书上创建的sar用户)
useradd sar
4.修改文件
* 文件apue.3e/Make.defines.linux
加入下面所示内容,指定工作目录
6 WKDIR = /home/sar/apue.3e
* 文件apue.3e/threadctl/getenv1.c
和apue.3e/threadctl/getenv3.c
第一行修改如下
1 #include <linux/limits.h>
5.下载安装libbsd和libbsd-devel
(我尝试yum安装,显示找不到libbsd安装包,故如下下载rpm包)
wget http://elrepo.reloumirrors.net/testing/el6/x86_64/RPMS/libbsd-devel-0.2.0-4.el6.elrepo.x86_64.rpm
wget http://elrepo.reloumirrors.net/testing/el6/x86_64/RPMS/libbsd-0.2.0-4.el6.elrepo.x86_64.rpm
rpm -ivh libbsd-0.2.0-4.el6.elrepo.x86_64.rpm
rpm -ivh libbsd-devel-0.2.0-4.el6.elrepo.x86_64.rpm
若不安装则在下一步make
时会出现如下报错:
.....
barrier.c:(.text+0x6e): undefined reference to `heapsort’
collect2: ld
make[1]: *** [barrier]
make[1]: Leaving directory `/home/albert/Documents/progs/apue.3e/threads’
make: *** [all]
6.编译apue
cd apue.3e/
make
7.把apue.h
与libapue.a
放入到对应的目录中
cp ./include/apue.h /usr/include/
cp ./lib/libapue.a /usr/local/lib/
原因:libapue.a是apue.h头文件中包含的所有函数及宏定义的具体实现,是一个静态链接库。查看ld.conf.d/libc.conf你会发现gcc在搜索链接库的时候默认会去搜索/usr/local/lib/中的文件。