Linux安装apue.3e(基于ubuntu12.0.4+centos6.8)

来源:互联网 发布:二手软件app软件哪个好 编辑:程序博客网 时间:2024/05/16 12:32

1.在网上下载书中源代码,百度搜索apue

2.解压文件:tar -zxvf *.tar.gz

3.cd apue.3e/

4.make

在这个过程中,你会看到最后由于can,t find -lbsd而不能make成功,解决办法是添加libbsd.a的静态链接库  

       sudo apt-get install libbsd-dev  

以下是我用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.rpm2.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]

5.make(again)

 

6.在编译成功的基础上,我们进行安装apue.h文件及其对应的静态链接库libapue.a

 

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

7.以上环境搭建成功了,下面是测试。

8.gcc 1-3.c -o 1-3 -lapue  (libapue.a在这里要写成apue,具体的gcc使用规则可以man一下,呵呵)

9.看见1-3执行程序了吧,赶紧执行一下

            ./1-3 .

 

10.最后说一下本例1-3就是书上的第一个程序---ls程序。


1 0
原创粉丝点击