关于apue.3e中apue.h的使用
关于apue.3e中apue.h的使用
近来要学一遍APUE第三版,并于此开博做为记录。
先下载源文件:
# url: http://http//www.apuebook.com/code3e.html
curl -O http://www.apuebook.com/src.3e.tar.gz
tar -zxvf src.3e.tar.gz
cd apue.3e
ls
从上面ls的结果看,其实完全看不明白这些目录与APUE书中代码的关系,或者有些目录可以猜测出是那一章。不过有个小技巧:
ls -l figlinks/
你会发现,这个目录下全是软链。通过软链正好可以对应到书上的代码。比如,书上图1-3为ls命令的简易实现,这正是:
# fig1.3 -> ../intro/ls1.c
先从apue.h的使用上做一说明。个人觉得有两种方式来使用,整理如下。 至于编译环境,本人使用Ubuntu 14.04 LTS。
一次编译生成libapue.a文件,长久使用
代码如下:
sudo apt-get install libbsd-dev
# 用于解决make时报:can,t find -lbsd错误。
make
# 编译成功后,执行如下copy操作:
# libapue.a是apue.h文件的静态链接库 sudo cp ./include/apue.h /usr/include/
sudo cp ./lib/libapue.a /usr/local/lib/ # 至于为什么要放置静态文件在上述目录,是因为gcc在加载静态文件时设置的从上述目录查询,可以通过如下文件知晓。
# /etc/ld.conf.d/libc.conf
下面来测试上述配置的效果。实际上,上述make时,已经将所有c文件编译成目标文件了。可以看下各个目录下都有相应.c文件的.o文件了。
gcc ls1.c
/tmp/ccyhkMzS.o: In function `main':
ls1.c:(.text+0x20): undefined reference to `err_quit'
ls1.c:(.text+0x5b): undefined reference to `err_sys'
collect2: error: ld returned exit status # 上述编译因为没有带apue表态库,所以gcc找不到APUE作者定义的错误处理函数,err_quit, err_sys。
gcc ls1.c -lapue # 带上apue表态库
./a.out ./
.
testerror.c
shell2.c
hello
# ...
如上,只有每次编译时带上-lapue的参数,即可以使用部署在/usr/local/lib/下的libapue.a库。
如果你是在Mac os X 10.11系统下编译,当copy文件到/usr/inlucde目录时,会出现Operation not permitted报错。
因为10.11启动了SIP特性,即使使用sudo cp也会失败。要关闭SIP,需要在Recovery OS环境下执行如下命令:
sudo csrutil disable
每次独立编译apue.h和error.c文件
第二种方式是每次单独编译apue,方法如下。需要先清理掉上述方法生成的编译环境:
sudo rm -vf /usr/include/apue.h /usr/local/lib/libapue.a
make clean # 清掉之前的编译临时文件 cp include/apue.h ./ cp lib/error.c ./ vi apue.h # 在最后一行的endif预编译命令前加上一行include指令如下(包括井号):
#inclulde "error.c" cp intro/ls1.c .
gcc -o ls ls.c
./ls ./
# 编译成功,执行成功。ls1.c需要的inlucde文件都已经copy到当前目录了
这种方式的好处是,每次编译时,使用了apue.h中的什么文件,直接从lib/下拷到当前目录即可,比较清楚的知道用了那些apue.h中的函数。
不足之处是每次都需要拷贝。
关于apue.3e中apue.h的使用的更多相关文章
- 如何自己编译apue.3e中代码 & 学习写makefile
本来是搜pthread的相关资料,看blog发现很多linux程序员都看的一本神书<APUE>,里面有系统的两章内容专门讲pthread(不过是用c语言做的代码示例,这个不碍事,还是归到原 ...
- [UNIX环境高级编程](第三版)中apue.h的问题
编译 gcc -g myls.c 时,报错 ‘找不到头文件 apue.h’ apue.h是作者自己写的一个文件,系统不自带.其中包含了常用的头文件,以及出错处理函数的定义. 需要到 http://ww ...
- APUE中fcntl.h的使用及O_SYNC在Mac与Ubuntu下的测试
此部分测试涉及到APUE V3中,第三章的图3-12到图3-14. 通过fcntl.h提供的功能,修改fd的文件属性,本处增加O_SYNC功能,并测试其效果. 本文涉及代码: tree ch3 ch3 ...
- apue.3e 的安装 (基于ubuntu12.0.4)
本菜刚刚学习UNIX下高级编程,无奈搭建本书编程环境时遇到不少问题.幸好网上有各种大神的解决办法让我最终解决了问题.在这里感谢为LINUX开源操作系统奋斗的大神. 不过话说回来,网上大都是针对UNIX ...
- 《UNIX环境高级编程》源码配置——apue.3e 安装
转载从:http://blog.csdn.net/songshimvp1/article/details/51440545 网上大都是针对UNIX高级编程第二版的头文件搭建,现在对于第三版来说有些过时 ...
- 《APUE》中的函数整理
第1章 unix基础知识 1. char *strerror(int errnum) 该函数将errnum(就是errno值)映射为一个出错信息字符串,返回该字符串指针.声明在string.h文件中. ...
- cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西。
cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西.
- 彻底弄清c标准库中string.h里的常用函数用法
在我们平常写的c/c++程序,一些算法题中,我们常常会用到c标准库中string.h文件中的函数,这些函数主要用于处理内存,字符串相关操作,是很有用的工具函数.而且有些时候,在笔试或面试中也会出现让你 ...
- 解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载
解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载 当这两个头文件顺序颠倒时,编译会出现许多莫名其妙的错误,错误如下: 1>…\include\ws2def.h( ...
随机推荐
- 【.net 深呼吸】细说CodeDom(2):表达式、语句
在上一篇文章中,老周厚着脸皮给大伙介绍了代码文档的基本结构,以及一些代码对象与CodeDom类型的对应关系. 在评论中老周看到有朋友提到了 Emit,那老周就顺便提一下.严格上说,Emit并不是针对代 ...
- 对抗假人 —— 前后端结合的 WAF
前言 之前介绍了一些前后端结合的中间人攻击方案.由于 Web 程序的特殊性,前端脚本的参与能大幅弥补后端的不足,从而达到传统难以实现的效果. 攻防本为一体,既然能用于攻击,类似的思路同样也可用于防御. ...
- 首个threejs项目-前端填坑指南
第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来.经过老板20天惨无人道的摧残,终于小有成就. 因为第一次搞 ...
- Java中的多态
1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal {public abstract void Say();} 子类: public class ...
- 操作系统篇-hello world(免系统运行程序)
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 今天起开始分享关于操作系统的相关知识,本人也是菜鸟一个,正处于学习阶段,这整个操作系统篇也是我边学习边总结的一些结果,希 ...
- 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)
WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...
- html5 canvas常用api总结(二)--绘图API
canvas可以绘制出很多奇妙的样式和美丽的效果,通过几个简单的api就可以在画布上呈现出千变万化的效果,还可以制作网页游戏,接下来就总结一下和绘图有关的API. 绘画的时候canvas相当于画布,而 ...
- C语言可以开发哪些项目?
C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程 ...
- 如何手动安装MySql
想安装当然要先有一个MySql的安装包 这里使用的是mysql-5.7.12-winx64 安装包百度云:http://pan.baidu.com/s/1kVAuXuv 密码:hr39 1.要将压缩 ...
- JS案例之2——cycle元素轮播
元素轮播效果是页面中经常会使用的一种效果.这个例子实现了通过元素的隐藏和显示来表现轮播效果.效果比较简单. 效果图如下: 源代码如下: <!DOCTYPE html> <html&g ...