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的编译 报错之后如何处理的更多相关文章

  1. Linux下配置APUE的编译环境

    APUE即Unix环境高级编程,本书中几乎所有的程序都包含一个apue.h的头文件,那如何配置这个apue.h呢? 1.我们可以在http://pan.baidu.com/s/1dDxmtbF中下载, ...

  2. 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 ...

  3. xocde7下导入libsqlite3.tbd编译报错的解决办法

    在xocde7下没有libsqlite3.dylib,只有libsqlite3.tbd,然后我导入了tbd.编译报错error: /Applications/Xcode.app/Contents/De ...

  4. linux下TP5安装好Workerman 报错:Class 'think\worker\Server' not found

    今天把功能放到服务器,本地测试正常,上传到服务器上报错Class 'think\worker\Server' not found 首先想到的是Windows和Linux下大小写的问题,查看了代码,并没 ...

  5. Linux下idea选择tomcat server 报错Warning the selected directory is not a valid tomcat home

    这是文件的权限问题,在tomcat的目录下执行以下代码 sudo chmod 777 -R tomcat8/ 然后再去idea中配置即可

  6. 解决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 ...

  7. linux 下 PHP Notice: session_start(): ps_files_cleanup_dir 报错 问题剖析

    如果在ubuntu/Debian下, 采用apt安装的PHP, 那么在使用Session的时候, 就可能会有小概率遇到这个提示. 代码如下: PHP Notice: session_start(): ...

  8. 在Linux下JDK1.4.2安装报错的解决方法

    JDK1.4.2的安装   Do you agree to the above license terms? [yes or no]   yes   Unpacking...   tail: cann ...

  9. Aspose Linux下字体找不到报错

    http://www.aspose.com/docs/display/cellsnet/Smart+Markers http://www.aspose.com/docs/display/cellsja ...

随机推荐

  1. 13、Spring Boot 2.x 多数据源配置

    1.13 Spring Boot 2.x 多数据源配置 完整源码: Spring-Boot-Demos

  2. jQuery.each(object, [callback])

    jQuery.each(object, [callback]) 概述 通用遍历方法,可用于遍历对象和数组.大理石平台检定规程 不同于遍历 jQuery 对象的 $().each() 方法,此方法可用于 ...

  3. MySQl的库操作、表操作和数据操作

    一.库操作 1.1库的增删改查 (1)系统数据库: performance_schema:用来收集数据库服务器的性能参数,记录处理查询时发生的各种事件.锁等现象 mysql:授权库,主要存储系统用户的 ...

  4. 页面的beforeunload和unload的事件应用

    博主最近遇到一个需求,需要在用户离开之前给一个提示,是否确认离开,并且用户确认离开的话,需要发出一个请求 下面直接上代码: <!DOCTYPE HTML> <html> < ...

  5. python 安装 pyHook

    下载网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook 查看python版本 C:\Users\k\Desktop\file_trans> ...

  6. JavaWeb_(SpringMVC框架)SpringMVC入门

    Spring MVC又叫SpringWebMVC是一个轻量级的基于请求响应的表现层框架.它是Spring框架的一部分.SpringMVC与Struts2都可以替代原始Servlet技术. Spring ...

  7. JavaWeb_(Mybatis框架)MyBatis Generator简单入门

    官方文档 传送门 下载地址 传送门 MyBatis Generator(MBG)简介: MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器.它将为 ...

  8. UVALive 4394 String painter ——(区间DP)

    其实这个dp过程有点似懂非懂...代码如下: #include <stdio.h> #include <algorithm> #include <string.h> ...

  9. JQuery 行内编辑(即点即改)

    行内编辑 下面是详细的代码: <style> .dian { cursor: pointer; } </style> //这个让鼠标 移动到 span上 的时候 是一个小手 & ...

  10. DQL:查询表中数据

    1. 基础查询 (1) 查询整表 SELECT * FROM 表名; -- 不推荐使用"*",不方便阅读 (2) 选择性查询 SELECT 列名,列名,列名 FROM 表名; (3 ...