记录关于APUE的编译方法

下载源码得到目录apue.2e,打开此目录,按照readme里提供的方法,先将文件Make.defines.linux里的WKDIR改为你的源代 码存放路径,默认是WKDIR=/home/var/apue.2e,修改完后,在目录apue.2e下执行make命令,出错。我的系统是Ubuntu 9.04,编译出错的原因应该是兼容性的问题,错误显示threadctl/getenv1.c下ARG_MAX未定义。ARG_MAX是在头文件 limits.h中定义的,但该文件位于目录/usr/include/linux/下,而getenv1.c的include语句是“#include <limits.h>”,这将在usr/include/下查找文件limits.h,但include目录下的文件limits.h并没有 定义ARG_MAX。因此将include语句改为“#include <linux/limits.h>”就行了。除了getenv1.c,还需修改同一目录下的getenv3.c的头文件声明部分,将 “#include <limits.h>”改为“#include <linux/limits.h>”。修改保存后,在apue.2e目录下执行make,显示了两个warning,问题出在文件 /threads/badexit2.c的两个函数里:printfoo和thr_fn2,我没理会这两个warning,这样源代码算是编译完成了。另 外一个问题,网上不少文章说要改apue.2e/std/目录下的linux.mk文件,将nawk改为awk,这只需要在你的linux内核版本较老时 才需要,nawk是新的awk,内核版本低的不支持nawk。如果内核版本较高,不需要修改。我在改和不改的情况下都试了一次,结果都一样。

    以上内容是在网上找到的。
    在我的实际安装过程中(ubuntu 9.04)不用作关于nawk的修改,但要作关于limits.h引用文件的修改。编译后把apue.h文件放到/usr/include文件夹下,把生成的libapue.a静态库放到/usr/lib文件夹下。
    然后为了在Eclipse下进行APUE中程序的测试。在Eclipse下需要配置静态链接库,方法如下:
    1 在project-》properties》c/c++general-》path and symbols-》library paths中添加/usr/lib(libapue.a所在目录)
    上面是指明lib目录,编译器在搜索lib的时候会在该目录下搜索,这是对整个eclipse都使用的配置。
    2 在 project-》properties》C/C++build-》setting-》tools setting-》gcc c linker-》libraries-》libraries中添加apue即可(注:make文件会写成-lapue )
    这是针对单个工程的设置。
    我就是用方法2进行的配置。

以下是几篇有关apue.2e源代码编译的文章,有所帮助。
APUE源代码编译:http://blog.chinaunix.net/u1/52350/showart_426726.html
linux下《UNIX环境高级编程》(apue2)源码编译出错的处理方法:http://www.linuxdiyf.com/bbs/viewthread.php?tid=90655&page=1&authorid=110739
APUE2作者提供的源码编译方法及单个源码编译的实现:http://blog.chinaunix.net/u/33048/showart_260473.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值