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环境高级编程 使用方法的更多相关文章

  1. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  2. multiple definition of `err_sys' 《UNIX环境高级编程》

    本文地址:http://www.cnblogs.com/yhLinux/p/4079930.html 问题描述: [点击此处直接看解决方案] 在练习<UNIX环境高级编程>APUE程序清单 ...

  3. (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  4. (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  5. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  6. (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  7. (十一) 一起学 Unix 环境高级编程 (APUE) 之 高级 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  8. 【转】apue《UNIX环境高级编程第三版》第一章答案详解

    原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835 大家好,从这周开始学习apue<UNIX环境高级编程第三版>,在此 ...

  9. [置顶] 文件和目录(二)--unix环境高级编程读书笔记

    在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...

随机推荐

  1. Hbase入门(三)——数据模型

    Hbase最核心但也是最难理解的就是数据模型,由于与传统的关系型数据库不同,虽然Hbase也有表(Table),也有行(Row)和列(Column),但是与关系型数据库不同的是Hbase有一个列族(C ...

  2. Spring boot 官网学习笔记 - Using Spring Boot without the Parent POM,但是还要使用Parent POM提供的便利

    If you do not want to use the spring-boot-starter-parent, you can still keep the benefit of the depe ...

  3. 阿里云安装zk并连接javaAPI测试

    1.安装 可参照Ubuntu 搭建Zookeeper服务进行安装并启动. 2.注意 阿里云环境开放2181端口 2.1 查看已开放端口: firewall-cmd --permanent --zone ...

  4. 2017春季_京东_Java后端研发岗面经

    纸上得来终觉浅,绝知此事要躬行  ——2017春季Java后端研发工程师面试心得 收获offer:上海汉得+北京中科软+成都百词斩+成都诺基亚研发中心+清华大学计算机研究所等offer.阿里一面猝.京 ...

  5. nginx的ngx_http_geoip2模块以精准禁止特定地区IP访问

    要求:对网站的信息,比如某个访问节点不想国内或者国外的用户使用,禁止国内或者国外或者精确到某个城市的那种情况. 解决方式:1.Cloudfalre来实现禁止特定国家的ip访问,比较简单,但是需要mon ...

  6. AOP框架Dora.Interception 3.0 [1]: 编程体验

    .NET Core正式发布之后,我为.NET Core度身定制的AOP框架Dora.Interception也升级到3.0.这个版本除了升级底层类库(.NET Standard 2.1)之外,我还对它 ...

  7. navicat for mysql中使用模型?

    登录进数据库后,点击模型--新建模型,如下 点击“小手”下面的图标----双击右边的空白处,即出现一个表格,可命名,此时我们命名为A 双击A表下空白处---即可设计A表属性,点确定.如下 同理,生成一 ...

  8. Spark 学习笔记之 优雅地关闭Spark Streaming

    优雅地关闭Spark Streaming: 当touch stop文件后,程序仍然会再执行一次,执行完成后退出.

  9. linux shell 统计当前目录下的文件个数

    shell 统计当前目录下文件个数,使用管道组合命令: ls -1 | wc -l 解释: ls -1 表示一行一个列出文件名. wc -l 表示打印统计的行数. 两个命令通过管道连在一起表示打印列出 ...

  10. uniapp 用户拒绝授权再次调起授权-语音识别、微信地址、附近地址

    小程序重构,采用 uniapp 框架.记录一下踩过的坑.关于用户拒绝再次调起授权,及如何识别语音识别.微信地址.附近地址的处理. 语音识别 组件 语音识别,小程序只有录音功能,若要识别录音文件,常规做 ...