Ubuntu14.04 LTS下 <<UNIX环境高级编程>>源代码下载编译步骤

来源:互联网 发布:腾讯软件管家mac版 编辑:程序博客网 时间:2024/06/07 00:22

这篇文章是我在系统中编译源代码时遇到的问题的一个总结。




首先,需要下载源代码,地址为http://www.apuebook.com/。大致浏览了下,可以下载源码和查看每个版本都修改了哪些bug,上面记载了有些将要在第五版中修复的bug。开始以为国内的网无法访问此网站,后来一点,上去了。


下面就开始了编译的阶段。

将源代码下载后解压,我解压的路径为/home/eric/apuesrc/apue.2e下面,用终端定位至此,首先阅读下源码中的readme文件,在我看来有价值的信息仅是把工作目录改为自己的解压目录,然后执行make命令。如下遇到的问题皆在互联网中找到了解决方案,在此我只是做一个总结而已。


1.无法找到apue.h文件。

   这个文件位于apue.2e/include下,但执行make的时候就是找不到,于是网上的解决方案是将apue.h文件拷贝到/usr/include/下即可。

2.In file included from printd.c:6:0: ipp.h:122:17: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘.’ token

    这个错误在网上搜到的是提示timex.h这个文件报错,我的系统没有报timex.h出错,但我到系统的/usr/inclue下找确实有这个文件而且其中也确实定义了

                         int status;                /* clock command/status */

    于是猜测是同一个问题,即宏定义冲突的问题。

    解决方案是把apue.2e/ipp/ipp.h中宏定义status改名,比如Status,然后执行make,系统会提示status找不到了,定位到apue.2e/ipp/printd.c中第977行:

                    i = ntohs(hp->status);

   将status改为Status即可。

3.再次编译仍然失败。

   这次出现的问题是:

   getenv1.c:4:20: error: ‘ARG_MAX’ undeclared here (not in a function)

     解决方案是:
    在apue.2e/include/apue.h中添加一行:
     #define ARG_MAX 4096
     打开apue.2e/threadctl/getenv1.c 和apue.2e/threadctl/getenv3.c,添加一行:
      #include "apue.h"。

到此基本完成,但还需改动两步:

1.把先前拷贝到/usr/include/目录下的apue.h中也要添加一句#define ARG_MAX 4096(系统每次编译好像找的是系统中.h文件??????)

这时再执行make命令,编译通过。

2.将编译生成的/apue.2e/lib/libapue.a的文件拷贝到/usr/lib/下,这个在今后编译执行书中例程时会需要。

~

编译运行程序
gcc  源程序.c -o 可执行程序名 -lapue


注意 :若-lapue 写在了源程序的前面会出现错误 eg. gcc ls1.c -o ls1 -lapue
因为
.a在链接的时候,必须放在文件之后
.so在链接的时候,对位置没有要求,前后都可以

0 0
原创粉丝点击