UNIX环境高级编程 使用方法
1、解压文件到apue.2e目录
2、修改相应平台的文件,我使用的是linux,所以修改Make.defines.linux
你修改的只需要这一行WKDIR=/home/your_dir/apue2e_src/apue.2e,改成自己的目录路径
3、记得首先安装开发工具,最简单的方法是进入图形界面的添加删除程序,选上开发工具就可以了。 cd到apue.2e目录执行make,之后你会在lib目录下面找到libapue.a 这个文件.
现在,你可以把它拷贝到你能寻找的地方,在编写例子的时候,你就可以
4、拷贝apue2e_src/apue.2e/include/apue.h和apue2e_src/apue.2e/lib/libapue.a
到你的源 代码目录。
5、使用gcc -o hello hello.c libapue.a来编译 你的源 代码
1 获得源码
从apue的官方网站http://www.apuebook.com/下载源码。(http://www.apuebook.com/src.tar.gz)
2 WKDIR
编辑源码解压生成的apue.2e文件夹下的Make.defines.linux
修改WKDIR=/home/sar/apue.2e为你的apue.2e目录,
比如我的apue源码解压在主目录下,那我就改为:
WKDIR=/home/chen/apue.2e
3 nawk
然后进入apue.2e/std 目录,编辑linux.mk。修改里面所有的nawk为awk。
4 stropts.h
如果出现stropts.h找不到的情况,则下载glibc-2.11 (地址 http://ftp.gnu.org/gnu/glibc/),解压缩
#cp ./glibc-2.11/streams/stropts.h /usr/include
#cp ./glibc-2.11/bits/stropts.h /usr/include/bits
#cp ./glibc-2.11/sysdeps/x86_64/bits/xtitypes.h /usr/include/bits
make clean 一下
继续make
5 ARG_MAX
在我的机器上编译时,提示ARG_MAX未定义,可以这么修改。
在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096
打开apue.2e/threadctl/getenv1.c 和apue.2e/threadctl/getenv3.c,添加一行:
#include "apue.h"
若要自己编译单个文件,则将 apue.h 和上述编译成功后生成的 libapue.a 静态库文件考到系统目录去
#cp ~/apue.2e/include/apue.h /usr/include
#cp ~/apue.2e/lib/libapue.a /usr/lib
举例编译第一个文件 ls1.c
#include "apue.h"
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
if (argc != 2)
err_quit("usage: ls directory_name");
if ((dp = opendir(argv[1])) == NULL)
err_sys("can't open %s", argv[1]);
while ((dirp = readdir(dp)) != NULL)
printf("%s\n", dirp->d_name);
closedir(dp);
exit(0);
}
链接apue的静态库即可:
$gcc -Wall ls1.c -lapue -o ls1
如果不拷贝 apue.h 和 libapue.a,则需要在编译命令中分别以 -I 和 -L 参数指定两个文件的位置(绝对相对均可),如:
$gcc -Wall ls1.c -I~/apue.2e/include -L~/apue.2e/lib -lapue -o ls1
另:libapue.a 这个静态库也可以自己编译生成。
$ar rs libapue.a ~/apue.2e/lib/*.o
或者:
$ar r libapue.a ~/apue.2e/lib/*.o
$ranlib libapue.a
UNIX环境高级编程 使用方法的更多相关文章
- (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- multiple definition of `err_sys' 《UNIX环境高级编程》
本文地址:http://www.cnblogs.com/yhLinux/p/4079930.html 问题描述: [点击此处直接看解决方案] 在练习<UNIX环境高级编程>APUE程序清单 ...
- (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- (十一) 一起学 Unix 环境高级编程 (APUE) 之 高级 IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- 【转】apue《UNIX环境高级编程第三版》第一章答案详解
原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835 大家好,从这周开始学习apue<UNIX环境高级编程第三版>,在此 ...
- [置顶] 文件和目录(二)--unix环境高级编程读书笔记
在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...
随机推荐
- 【ADO.NET基础知识】SqlConnection、command、DataSet 、DataTable、dataAdapter
1.使用Connection连接数据库的步骤: (1).添加命名空间 System.Data.SqlClient(注意:初学者经常会忘记) (2)定义连接字符串.连接SQL Server 数据库时: ...
- jQuery常用方法(二)-事件
ready(fn); $(document).ready()注意在body中没有onload事件,否则该函数不能执行.在每个页面中可以 有很多个函数被加载执行,按照fn的顺序来执行. bind( ty ...
- Centeos7部署Flask+Gunicorn+nginx
一.环境安装 pip3 install flask pip3 install gunicorn pip3 install nginx 二.模块介绍 1.Flask是一个使用 Python 编写的轻量级 ...
- 十大排序算法JavaScript实现总结
花费了几周的时间断断续续的练习和模仿与使用JavaScript代码实现了十大排序算法. 里面有每种算法的动图和静态图片演示,看到图片可以自己先按照图片的思路实现一下. github中正文链接,点击查看 ...
- C# HttpWebRequest 后台调用接口上传大文件以及其他参数
直接上代码,包各位看客能用!!! 1.首先请求参数的封装 /// <summary> /// 上传文件 - 请求参数类 /// </summary> public class ...
- 第一篇:php开发环境
Window: 1.XAMPPhttps://www.apachefriends.org/index.html 2.WampServerhttp://www.wampserver.com/ Linux ...
- 究竟是.NET淹没在汪洋大海,还是人心的浮躁、见识的短浅?
这些年来有相当多的.net开发者转了其他语言,也有一部分是迫不得已因为公司的转型而转,其中也有一大部分觉得.net没前途性能不好比某些语言性能差.还有一部分会说出一些名词去指责.net说他做不到,其实 ...
- typedef说明
typedef 只对已有的类型进行别名定义,不产生新的类型: #define 只是在预处理过程对代码进行简单的替换. 类比理解: typedef unsigned int UINT32; // ...
- 使用LitePal升级表
传统的升级表方式 上一篇文章中我们借助MySQLiteHelper已经创建好了news这张表,这也是demo.db这个数据库的第一个版本.然而,现在需求发生了变更,我们的软件除了能看新闻之外,还应 ...
- Linux内存描述之内存区域zone–Linux内存管理(三)
服务器体系与共享存储器架构 日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.7 X86 & arm gatieme LinuxDeviceDriver ...