从零开始UNIX环境高级编程(0):Linux下运行第一个程序

0. 准备

UNIX环境高级编程(简称APUE)书中要求使用cc进行编译。 Linux上执行cc对应调用的还是gcc,所以只要安装了gcc,就能够编译。验证过程如下:

root@ubuntu:/home/ckt/work/unix/code# which cc
/usr/bin/cc
root@ubuntu:/home/ckt/work/unix/code# ls -al /usr/bin/cc
lrwxrwxrwx 1 root root 20 Nov 26  2014 /usr/bin/cc -> /etc/alternatives/cc
root@ubuntu:/home/ckt/work/unix/code# ls -al /etc/alternatives/cc
lrwxrwxrwx 1 root root 12 Nov 26  2014 /etc/alternatives/cc -> /usr/bin/gcc

1. 编译

编辑列出一个目录中所有文件名字的例子

ckt@ubuntu:~/work/unix/code$ vi ls_test.c

#include "apue.h"
#include <dirent.h>

int main(int argc, char const *argv[])
{
DIR             *dp;
struct  dirent  *dirp;

if (argc != 2) 
    err_quit("eeee");
if ((dp = opendir(argv[1])) == NULL)
    err_sys("can't open %s", argv[1]);
while ((dirp = readdir(dp)) != NULL)
    printf("%s\n", dirp->d_name);

closedir(dp);
exit(0);
}

执行cc ls_test.c 进行编译,会报错"apue.h: No such file or directory"

ckt@ubuntu:~/work/unix/code$ cc ls_test.c 
ls_test.c:1:18: fatal error: apue.h: No such file or directory
compilation terminated.

2. 下载apue源码

apue是Advanced Programming in the UNIX Environment的缩写,apue.h是作者自己定义的头文件。因此,需要从APUE的网站上下载源码,导入apue.h等编译依赖的文件。

APUE网站:http://www.apuebook.com/ , 选择对应版本。

APUE

下载完成以后,将其解压。

ckt@ubuntu:~/work/unix/code$ wget http://www.apuebook.com/src.3e.tar.gz
ckt@ubuntu:~/work/unix/code$ ls
ls_test.c  src.3e  src.3e.tar.gz

3. 复制apue.h到/usr/include/

缺少的apue.h位于/apue.3e/include路径下,将其复制到/usr/include/,需要root权限

ckt@ubuntu:~/work/unix/code/src.3e$ cp ./apue.3e/include/apue.h /usr/include/
cp: cannot create regular file `/usr/include/apue.h': Permission denied

4. 重新编译

重新编译,报错undefined reference to `err_quit',需要找到err_quit声明的头文件,将其导入。

root@ubuntu:/home/ckt/work/unix/code# cc ls_test.c 
/tmp/cc4mpAeU.o: In function `main':
ls_test.c:(.text+0x20): undefined reference to `err_quit'
ls_test.c:(.text+0x5b): undefined reference to `err_sys'
collect2: ld returned 1 exit status

5. 复制error.c到/usr/include/

由于/usr/include/已经存在error.h,因此不能直接复制。

root@ubuntu:/home/ckt/work/unix/code# ls -l /usr/include/ | grep erro
-rw-r--r--  1 root root   2132 Aug 27  2014 error.h

6. 复制error.c到/usr/include/,并修改/usr/include/apue.h。

在apue.h文件末尾的#endif /* _APUE_H */前面添加代码#include "error.c",然后保存文件。

root@ubuntu:/home/ckt/work/unix/code# cp ./src.3e/apue.3e/lib/error.c /usr/include/
root@ubuntu:/home/ckt/work/unix/code# cd /usr/include/
root@ubuntu:/usr/include# vi apue.h 

7. 重新编译

重新编译后,没有报错,生成了a.out

root@ubuntu:/home/ckt/work/unix/code# cc ls_test.c 
root@ubuntu:home/ckt/work/unix/code# ls
a.out  ls_test.c  src.3e  src.3e.tar.gz

8. 运行

运行a.out,显示出当前目录下有哪些文件

root@ubuntu:/home/ckt/work/unix/code# ./a.out ./
src.3e
..
a.out
src.3e.tar.gz
.
ls_test.c

9. 参考

http://www.01happy.com/unix-advanced-programming-apue/
http://www.cnblogs.com/zhouyinhui/archive/2010/02/01/1661078.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容