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

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