獲取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