您的位置:首页 > 产品设计 > UI/UE

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

2012-02-27 22:12 507 查看
背景: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: