背景:APUE这些年陆陆续续看了几遍,一直是桌子边的必放的参考书,但是一直没有把它的例子程序玩一遍,这一直是我心中的遗憾。今天尝试把原书(第二版)提供的代码下载下来,在我用的机器上跑起来,算了却我这个心愿的头一步吧。
获取APUE代码
下载APUE的源代码包:
wget http://www.apuebook.com/src.tar.gz
解压到你的代码目录:
cd /your/path;tar xzvf srx.tar.gz;cd apue.2e
修改APUE的代码工程
修改Makefilez中变量WKDIR的值,以确定代码的顶层目录位置。
- WKDIR=/home/sar/apue.2e
+ WKDIR=/your/path/apue.2e
修改nawk为awk或gawk(linux上一般用awk或gawk替代nawk)
将std/linux.mk文件中的nawk改为awk或gawk
修改APUE代码编译问题
1)修改threadctl/getenv3.c、threadctl/getenv1.c缺少宏ARG_MAX的编译错误
在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096
打开apue.2e/threadctl/getenv3.c(包括getenv1.c),添加一行:
#include "apue.h"
2)修改ipp目录编译不过的问题
在ipp/linux.mk文件中EXTRA=-DDEBUG行后添加
CFLAGS=-DLINUX -ansi -I$(WKDIR)/include -Wall $(EXTRA) -g
添加编译调试信息
对应需要是用gdb调试学习的可以修改Make.defines.linux文件添CFLAGS变量-g
实验机器的版本
gcc版本信息gcc -v
gcc -vUsing built-in specs.
获取APUE代码
下载APUE的源代码包:
wget http://www.apuebook.com/src.tar.gz
解压到你的代码目录:
cd /your/path;tar xzvf srx.tar.gz;cd apue.2e
修改APUE的代码工程
修改Makefilez中变量WKDIR的值,以确定代码的顶层目录位置。
- WKDIR=/home/sar/apue.2e
+ WKDIR=/your/path/apue.2e
修改nawk为awk或gawk(linux上一般用awk或gawk替代nawk)
将std/linux.mk文件中的nawk改为awk或gawk
修改APUE代码编译问题
1)修改threadctl/getenv3.c、threadctl/getenv1.c缺少宏ARG_MAX的编译错误
在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096
打开apue.2e/threadctl/getenv3.c(包括getenv1.c),添加一行:
#include "apue.h"
2)修改ipp目录编译不过的问题
在ipp/linux.mk文件中EXTRA=-DDEBUG行后添加
CFLAGS=-DLINUX -ansi -I$(WKDIR)/include -Wall $(EXTRA) -g
添加编译调试信息
对应需要是用gdb调试学习的可以修改Make.defines.linux文件添CFLAGS变量-g
实验机器的版本
gcc版本信息gcc -v
gcc -vUsing built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i586-suse-linux/4.5/lto-wrapper
Target: i586-suse-linux
Configured with: ../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.5 --enable-ssp --disable-libssp --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --program-suffix=-4.5 --enable-linux-futex --without-system-libunwind --enable-gold --with-plugin-ld=/usr/bin/gold --with-arch-32=i586 --with-tune=generic --build=i586-suse-linux
Thread model: posix
gcc version 4.5.1 20101208 [gcc-4_5-branch revision 167585] (SUSE Linux)
系统版本信息
uname -srvm
Linux 2.6.37.6-0.9-desktop #1 SMP PREEMPT 2011-10-19 22:33:27 +0200 i686