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

APUE即Unix环境高级编程,本书中几乎所有的程序都包含一个apue.h的头文件,那如何配置这个apue.h呢?
官方地址:http://www.apuebook.com/apue3e.html
1、我们可以在src.3e.tar中下载,然后放到你的Linux桌面上(没桌面的,随意放吧)
2、解压下载的文件:
tar -zxvf 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/中的文件,所以我们将其放在这里,一劳永逸。。。。(不过自己要知道哦)
Linux下配置APUE的编译 报错之后如何处理的更多相关文章
- Linux下配置APUE的编译环境
APUE即Unix环境高级编程,本书中几乎所有的程序都包含一个apue.h的头文件,那如何配置这个apue.h呢? 1.我们可以在http://pan.baidu.com/s/1dDxmtbF中下载, ...
- Linux下登陆MySQL时遇到报错"RROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) "
前言 作者在2021-07-21时遇到 linux下登陆MySQL时遇到报错"RROR 1045 (28000): Access denied for user 'root'@'localh ...
- xocde7下导入libsqlite3.tbd编译报错的解决办法
在xocde7下没有libsqlite3.dylib,只有libsqlite3.tbd,然后我导入了tbd.编译报错error: /Applications/Xcode.app/Contents/De ...
- linux下TP5安装好Workerman 报错:Class 'think\worker\Server' not found
今天把功能放到服务器,本地测试正常,上传到服务器上报错Class 'think\worker\Server' not found 首先想到的是Windows和Linux下大小写的问题,查看了代码,并没 ...
- Linux下idea选择tomcat server 报错Warning the selected directory is not a valid tomcat home
这是文件的权限问题,在tomcat的目录下执行以下代码 sudo chmod 777 -R tomcat8/ 然后再去idea中配置即可
- 解决linux下sudo更改文件权限报错xxxis not in the sudoers file. This incident will be reported.
本文转自Linux社区作者为z-sm的文章 原文链接http://www.linuxidc.com/Linux/2016-07/133066.htm 之前一直使用的是ubuntu,后来安装了Cento ...
- linux 下 PHP Notice: session_start(): ps_files_cleanup_dir 报错 问题剖析
如果在ubuntu/Debian下, 采用apt安装的PHP, 那么在使用Session的时候, 就可能会有小概率遇到这个提示. 代码如下: PHP Notice: session_start(): ...
- 在Linux下JDK1.4.2安装报错的解决方法
JDK1.4.2的安装 Do you agree to the above license terms? [yes or no] yes Unpacking... tail: cann ...
- Aspose Linux下字体找不到报错
http://www.aspose.com/docs/display/cellsnet/Smart+Markers http://www.aspose.com/docs/display/cellsja ...
随机推荐
- python的logging日志模块(一)
最近修改了项目里的logging相关功能,用到了Python标准库里的logging模块,在此做一些记录.主要是从官方文档和stackoverflow上查询到的一些内容. 官方文档 技术博客 基本用法 ...
- java正则表达式——总结
在JDK 1.4中,Java增加了对正则表达式的支持. java与正则相关的工具主要在java.util.regex包中:此包中主要有两个类:Pattern.Matcher. Pattern 模式类 ...
- 在多语句事务内不允许使用 CREATE DATABASE 语句。
方法一:create database [ 项目名称] 方法二:update-database -verbose
- Python 10.1
- HDU3076 ssworld VS DDD
嘟嘟嘟 友情提示:数据把\(hp1\)和\(hp2\)弄反了! 进入正题. 这题还是比较好想,令\(dp[i][j]\)表示第一个人赢了\(i\)场,第二个人赢了\(j\)的概率,转移就是分别考虑这一 ...
- Codevs 1242 布局 2005年USACO(差分约束)
1242 布局 2005年USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近 ...
- SDUT2176 -> 递归的函数
递归的函数 Time Limit: 1000 msMemory Limit: 65536 KiB Problem Des ...
- C语言问答九问
C语言问题观: 一.环境搭建问题:linux,(可以是w10下linux子系统):vim(notepad++),gcc编译器,gdb调试器,make自动编译工具,ddd分析工具和valgrind分析工 ...
- Java并发指南8:AQS中的公平锁与非公平锁,Condtion
一行一行源码分析清楚 AbstractQueuedSynchronizer (二) 转自https://www.javadoop.com/post/AbstractQueuedSynchronizer ...
- JSON字符串控制台格式化输出 java
1.正常情况下返回的json数据格式如下: {"header":{"transSn":"e33128bb7622462ebfb2cbfcc46baa1 ...