APUE unix 环境高级编程第三版 源码无法 make 成功, 对‘heapsort’未定义的引用
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
ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/i386/libbsd-0.6.0-1.el6.i686.rpm
ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/i386/libbsd-devel-0.6.0-1.el6.i686.rpm
2.1b) x86_64
ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/x86_64/libbsd-0.6.0-1.el6.x86_64.rpm
ftp://ftp.univie.ac.at/systems/linux/fedora/epel/6/x86_64/libbsd-devel-0.6.0-1.el6.x86_64.rpm
2.2)安装如上包,注意命令顺序
2.2a) i386
sudo yum install libbsd-0.6.0-1.el6.i686.rpm
sudo yum install libbsd-devel-0.6.0-1.el6.i686.rpm
2.2b) x86_64
sudo yum install libbsd-0.6.0-1.el6.x86_64.rpm
sudo yum install libbsd-devel-0.6.0-1.el6.x86_64.rpm
2.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书籍同目录下拉