APUE(UNIX环境高级编程)的源代码编译与调试

背景: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.
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章