Linux下配置APUE的编译 报错之后如何处理

APUE即Unix环境高级编程,本书中几乎所有的程序都包含一个apue.h的头文件,那如何配置这个apue.h呢?官方地址:http://www.apuebook.com/apue3e.html

1、我们可以在src.3e.tar中下载,然后放到你的Linux桌面上(没桌面的,随意放吧)

2、解压下载的文件:

tar -zxv -f src.3e.tar.gz

3、进入解压后的目录:

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/中的文件,所以我们将其放在这里,一劳永逸。。。。(不过自己要知道哦)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值