解决《UNIX环境高级编程》(APUE)示例代码的编译问题
转自 http://cunsheng.sinaapp.com/?p=360
APUE中示例很多, 把这些源码拿来跑跑调调对学习理解有着莫大的帮助, 随书网站就提供了源码下载, 不过我自己在Linux和Mac OS X编译时都遇到了一些小问题, 以下是解决方法和其他一些提示, 希望能对其他人有用
下载了源代码后, 正常情况下两步操作就可以完成编译
- 根据你的操作系统选择对应的Make.defines.*文件, 例如你使用的是Linux, 那么就选择Make.defines.linux, 打开并修改其中的第6行, 将WKDIR的值设为解压出的源码文件夹的绝对路径
- make
编译时可能会出现不少warning, 但只要能一直执行到最后就算是成功, 可以echo $?看看, 如果输出0就表示成功
Linux下的编译问题
我的Linux发行版是CentOS release 5.4 (Final), make时报如下错误
| 1 2 3 4 5 | make[2]: Entering directory `/home/cunsheng/code/apue.2e/std'nawk -f makeconf.awk>conf.c/bin/sh: nawk: commandnot foundmake[2]: *** [conf.c] Error 127make[2]: Leaving directory `/home/cunsheng/code/apue.2e/std' | 
提示nawk不存在, 关于nawk与awk的异同可见这里, 解决这个问题可以简单的用awk替代nawk来解决, 可以挑PATH中的任一可寻路径(例如~/bin) ln -s建立个nawk的软链到awk, 然后一定记得make clean后再make, 否则你会遇到下面的这个问题
| 1 2 3 4 5 6 7 | make[2]: Entering directory `/home/cunsheng/code/apue.2e/std'gcc -DLINUX -ansi -I/home/cunsheng/code/apue.2e/include-Wall -D_GNU_SOURCE -L../libconf.c ../lib/libapue.a -o conf/usr/lib/../lib64/crt1.o: In function`_start':(.text+0x20): undefined reference to `main'collect2: ld returned 1 exitstatusmake[2]: *** [conf] Error 1make[2]: Leaving directory `/home/cunsheng/code/apue.2e/std' | 
OS X下的编译问题
我的版本是10.8.1, Xcode版本是4.4.1, make时报如下错误
| 1 2 3 4 5 6 | gcc -ansi -I/Volumes/Cunsheng/Home/Code/apue.2e/include-Wall -DMACOS -DDEBUG -o call main.o call.o put.o take.o takeput.o escape.o loop.poll.o ../sockets/clconn.o ../lib/libapue.aUndefined symbols forarchitecture x86_64:"_CMSG_LEN", referenced from:_recv_fd inlibapue.a(recvfd.o)ld: symbol(s) not found forarchitecture x86_64collect2: ld returned 1 exitstatus | 
造成这个问题的原因, 从表面看是”CMSG_LEN”宏缺少了对OS X的定义, 但我猜测可能这背后还有故事, 这里就不细究了, 解决方法也很简单, 打开include/apue.h, 在第8行往后插入以下两行代码后再make clean; make即可
| 1 2 | #elif defined(MACOS)#define CMSG_LEN(x) _CMSG_DATA_ALIGN(sizeof(struct cmsghdr)+(x)) | 
关于GDB
在实践APUE示例源码时用gdb配合当然是最好不过了, 不过你需要在cc时加上-g选项才能输出gdb调试时所需的symbols
打开你的操作系统对应的Make.defines.*文件, 在第7行的加上-g选项就OK了
最后提醒下, 源码的章节编号是按照英文版来的, 例如我的APUE第二版第4页的程序清单1-1, 理应对应的源码是fig1.1, 但实际却是fig1.3, 找代码时要人脑offset一下才是
最最后, 感谢已故的Richard Stevens大神留下的这一系列好书
解决《UNIX环境高级编程》(APUE)示例代码的编译问题的更多相关文章
- (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
		. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ... 
- (十一) 一起学 Unix 环境高级编程 (APUE) 之 高级 IO
		. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ... 
- (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
		. . . . . 目录 (一) 一起学 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) 之 信号
		. . . . . 目录 (一) 一起学 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) 之 网络 IPC:套接字
		一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级 ... 
随机推荐
- Promise 基础学习
			Promise 是ES6的特性之一,采用的是 Promise/A++ 规范,它抽象了异步处理的模式,是一个在JavaScript中实现异步执行的对象. 按照字面释意 Promise 具有"承 ... 
- day8--socketserver
			socketserver分类: 1.TCP协议 class socketserver.TCPServer(server_address,RequestHandlerClass,bind_and_act ... 
- JQuery操作元素的属性与样式及位置
			<script type="text/javascript" src="JQuery/jquery-1.5.1.js"></script> ... 
- BZOJ2333 [SCOI2011]棘手的操作 堆 左偏树 可并堆
			欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2333 题意概括 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i ... 
- 020 SpringMVC返回Json
			一:处理Json 1.添加jar包 添加json需要的包 2.后端返回json对用的对象或者集合 使用ResponseBody标签 package com.spring.it.json; import ... 
- 024 IDEA不能新建spring下的配置文件xml
			这个问题以前就遇到过,一直懒得解决,现在必须要用了,解决了一下,发现网上的解决方式果然不错. 1.现象 2.解决方式 需要添加一下spring context的依赖即可 
- POJ 2409 Let it Bead【Polya定理】(模板题)
			<题目链接> 题目大意:用k种颜色对n个珠子构成的环上色,旋转.翻转后相同的只算一种,求不等价的着色方案数. 解题分析: 对于这种等价计数问题,可以用polay定理来解决,本题是一道pol ... 
- hdu 4513 最长不下降回文序列【manacher】
			<题目链接> 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形 ... 
- dns 监控系统 设计  dns安全威胁的可视化。
			基于DNS大数据分析实现宽带共享监控系统.实现对宽带用户进行有效管理. 本系统基于DNS大数据分析实现宽带共享监控系统,包括以下方面. 1)数据采集:数据采集过程是通过探针采集的方式,从各地市的DNS ... 
- codeforces1027F. Session in BSU
			题目链接 codeforces1027F. Session in BSU 题解 二分图匹配就fst了....显然是过去的,不过tle test87估计也pp了,好坑 那么对于上面做匹配的这个二分图分情 ... 
