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
最新文章
- 【干货分享】流程DEMO-合同会审表
- mongoDB01 介绍
- [linux basic]基础--信号
- 类似qq空间的无限回复怎么实现??
- kettle的HTTPPOST控件发送WSDL的webservice请求配置
- [Swift]LeetCode198. 打家劫舍 | House Robber
- Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗
- JavaScript原型与闭包相关
- python中常用的九种数据预处理方法分享
- java工具类,在Windows,Linux系统获取电脑的MAC地址、本地IP、电脑名
- latex安装及基本使用
- android sdk更新代理设置
- WinForm DataGridView新增加行
- opencv mat flags含义
- net与树莓派的情缘(二)
- 【BZOJ2827】千山鸟飞绝 hash+堆+SBT
- Paxos在大型系统中的应用场景
- linux服务器最大连接数
- 【Visual Studio】“rc.exe”已退出,代码为 5 (";rc.exe"; exited with code 5.)
- 向现有mvc程序中加入devexpress report
热门文章
- JsonConfig的jsonConfig.setExcludes的用法
- js 判断字符串是否存在某个字符串
- cmd控制台 wrapper | OpenSCManager failed - 拒绝访问。 (0x5)解决
- 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU特性那些事(5)- 划时代新品RT1170
- RocketMQ 源码学习笔记————Producer 是怎么将消息发送至 Broker 的?
- 快学Scala 第十一课 (类继承)
- Docker5-docker私库的搭建及常用方法-harbor-registry方式
- 史上最全docker基础知识汇总
- 【TencentOS tiny】深度源码分析(6)——互斥锁
- COGS 2095. 不平凡的引线