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

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

2013-12-22 20:33 337 查看
《Unix环境高级编程》非常详细的介绍了在UNix\linux环境下用C编程的重要问题,但是第一章开始却没有介绍如何正确的配置作者设定的开发环境。特别是找不到apue.h文件。显示如下的问题:

错误:apue.h:没有那个文件或目录

apue.h是作者定义的文件,包含了某些标准系统头文件,其代码结构并不复杂,但是书中几乎每一个程序都包含此文件,对于一个新手该如何运行起第一程序呢?

【第一步】:配置开发环境。

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

①进入解压目录apue.2e,修改 Make.defines.linux中的WKDIR=/home/xxx/apue.2e,改为文件所在的目录,例如,笔者的为WKDIR=/home/walfred/Unix/apue.2e

②进入std目录,修改linux.mk,将里面的nawk全部改为awk。

③复制apue.h和error.c

将apue.h和error.c两个文件copy到/usr/include目录下。(apue.h位于 your_apue_path/inlcude ; error.c位于your_apue_path/lib ),例如:

cp /home/walfred/Unix/apue.2e /usr/include/

cp /home/user/apue.2e /usr/include/ (实现apue.h中的出错处理函数)

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

至此,基本的配置文件就做好了。

【第二步】:在home/下建立一个文件夹,然后建立一个.c文件,我们将第一文件命名为hello.c文件,输入代码:

#include<apue.h>

#include<dirent.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);

}

【第三步:编译】

该如何将该程序执行起来呢?可以执行下面几条命令

【1】预处理

命令格式为 gcc -E -o [目标文件] [编译文件]

GCC的选项“-E”可以使编译器在预处理结束时就停止编译,否则执行下一个阶段的时候,会产生大量错误,选项“-o”是指定GCC输出的结果。

例如,上面的文件编译命令为:

gcc -E -o hello.i hello.c

【2】编译阶段

gcc -S -o hello.s hello.i

“-S”使编译器在进行完汇编之前就停止。“.s”是汇编语言原始程序。

【3】汇编阶段

gcc -c hello.s -o hello.o

【4】链接阶段

gcc hello.o -o hello

【5】执行

./hello /home

则此时就会将 home下的文件名都显示出来。

至此第一个程序就运行起来了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: