Unix环境高级编程apue.h文件问题,与运行第一个程序

      《Unix环境高级编程》非常详细的介绍了在UNix\linux环境下编程的重要问题,里面很多例子很经典的,利用好了是可以直接移植到我们的程序里的。但是第一章开始却没有介绍如何正确的配置作者设定的开发环境,。特别是找不到文件找不到函数等。下面介绍如何正确的配置。

1.下载源码并整体编译

  到http://www.apuebook.com/下载src.tar.gz包,该书现在分为92、05版和13版,笔者使用的是第二版,因此下载了第二个,然后解压至电脑中的某个目录,比如我的是在 /home/lqc/Desktop/下.

①进入解压目录apue.2e,修改 Make.defines.linux中的WKDIR=/home/xxx/apue.2e,改为文件所在的目录,例如,笔者的为WKDIR= /home/lqc/Desktop/apue
②进入std目录,修改linux.mk,将里面的nawk全部改为awk。
③将apue.h文件copy到/usr/include目录下。(apue.h位于 your_apue_path/inlcude ),例如:
  cp /home/lqc/Desktop/apue/include  /usr/include/
 

假如执行上面的代码时给出不能复制文件的提示,则在两个命令前面都加上 sudo 。

然后在/home/lqc/Desktop/apue/下执行make命令即可编译。如果不能编译,可能是make文件没有“可执行”的权限。执行“sudo chmod 777 -R ../apue”,将所有文件的权限提升至最高。

另外,在编译的时候可能还会显示一些错误,例如我的提示“*** [printd.o] Error 1”这个是程序里面的事,以后研究这个方法的时候再说,现在不管它。

2.编译时的err_sys和err_quit错误处理方法

为了进一步研究程序的结构,我将第一个程序拿出来编译,但是遇到一个问题err_sys和err_quit函数找不到。这两个函数不是C语言自带函数,是作者自己编写的。所以,想要运行书中的源代码,就必须自建一个头文件my_err.h把作者的代码拷贝进去,然后在程序中加载。这些代码在哪里呢?就是/lib/error.c文件,不过为了方便,可以这么做:
cp lib/error.c /usr/include/my_error.h
后面再写代码的时候,直接加上头文件my_error.h就行了。

3.运行第一个程序

在home/下建立一个文件夹,然后建立一个.c文件,我们将第一文件命名为readdir.c文件,输入代码(教材P4的程序清单1-1):
#include<apue.h>
#include<dirent.h>
#include<my_err.h>
int main(int argc,char*argv[])
{
DIR *dp;
struct dirent *dirp;
if(argc!=2)
err_quit("usage  :ls directory_name");
if((dp=opendir(argv[1]))==NULL)
err_sys("can not open %s ",argv[1]);
 
while((dirp=readdir(dp))!=NULL)
printf("%s\n",dirp->d_name);
 
closedir(dp);
exit(0);
}

编译的话,可以直接使用命令 gcc readdir.c -o readdir

此时生成一个可执行程序readdir

也可以直接输入gcc readdir.c

这时候生成的可执行程序叫a.out

4.编译的进一步讨论

如果你对编译感兴趣,可以继续看下面的介绍

该如何将该程序执行起来呢?可以执行下面几条命令
【1】预处理
命令格式为 gcc -E -o [目标文件] [编译文件]
GCC的选项“-E”可以使编译器在预处理结束时就停止编译,否则执行下一个阶段的时候,会产生大量错误,选项“-o”是指定GCC输出的结果。
例如,上面的文件编译命令为:
gcc -E -o readdir.i readdir.c
【2】编译阶段
gcc -S -o readdir.s readdir.i
“-S”使编译器在进行完汇编之前就停止。“.s”是汇编语言原始程序。
【3】汇编阶段
gcc -c readdir.s -o readdir.o
【4】链接阶段
gcc readdir.o -o readdir
【5】执行
./readdir /home
则此时就会将 home下的文件名都显示出来。
至此第一个程序就运行起来了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵横千里,捭阖四方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值