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

最新文章

  1. 【干货分享】流程DEMO-合同会审表
  2. mongoDB01 介绍
  3. [linux basic]基础--信号
  4. 类似qq空间的无限回复怎么实现??
  5. kettle的HTTPPOST控件发送WSDL的webservice请求配置
  6. [Swift]LeetCode198. 打家劫舍 | House Robber
  7. Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗
  8. JavaScript原型与闭包相关
  9. python中常用的九种数据预处理方法分享
  10. java工具类,在Windows,Linux系统获取电脑的MAC地址、本地IP、电脑名
  11. latex安装及基本使用
  12. android sdk更新代理设置
  13. WinForm DataGridView新增加行
  14. opencv mat flags含义
  15. net与树莓派的情缘(二)
  16. 【BZOJ2827】千山鸟飞绝 hash+堆+SBT
  17. Paxos在大型系统中的应用场景
  18. linux服务器最大连接数
  19. 【Visual Studio】“rc.exe”已退出,代码为 5 (&quot;rc.exe&quot; exited with code 5.)
  20. 向现有mvc程序中加入devexpress report

热门文章

  1. JsonConfig的jsonConfig.setExcludes的用法
  2. js 判断字符串是否存在某个字符串
  3. cmd控制台 wrapper | OpenSCManager failed - 拒绝访问。 (0x5)解决
  4. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU特性那些事(5)- 划时代新品RT1170
  5. RocketMQ 源码学习笔记————Producer 是怎么将消息发送至 Broker 的?
  6. 快学Scala 第十一课 (类继承)
  7. Docker5-docker私库的搭建及常用方法-harbor-registry方式
  8. 史上最全docker基础知识汇总
  9. 【TencentOS tiny】深度源码分析(6)——互斥锁
  10. COGS 2095. 不平凡的引线