关于CS:APP 中code example程序包的使用方法

CS:APP官方网站上为自学者提供了包含有全部书上代码的程序包(详见连接
然而,在编译这些程序的时候,笔者遇到了一些问题。
1、找不到代码中的头文件"csapp.h"
2、将这个"csapp.h",函数具体实现所在的"cs:app.c"与代码放入同一子目录之后,编译器报错,显示找不到头文件中声明函数的实现。

笔者首先参考了将.h与.c移动到/usr/include以及将csapp.c编译成为动态连接库的方案,但是都没有解决问题。

随后,笔者发现,在每一个子目录下都有一个makefile文件。于是笔者尝试对他们进行重新编译。
在对于这些文件夹进行编译的时候,笔者发现makefile报了与/src/csapp.o冲突的错误。进入/src目录,发现/src 中已经存在了.o文件。这些.o文件与笔者的gcc版本相冲突。
于是,笔者采取了以下解决方案:
1、将/src目录make clean清除已有的.o文件后重新执行make进行编译。
2、将其余目录依次用make命令进行编译。

此时,笔者发现,除了与64位机器不兼容的类似hello-asm32.S之外,其余都成功编译完成。
通过观察makefile的输出以及makefile文件的内部的内容,笔者发现,程序包的编者采用的编译方式如下:
gcc -Wall -Og -I …/include -I . waitforsignal.c …/src/csapp.o -lpthread -o waitforsignal
通过查询gcc -I的释义,我们发现:
**-I后面的目录即为gcc所指定的第一个进行寻找的目录, 而-l后面的库则是代表了链接时所需要的库。**由于csapp.c 可能需要使用多线程,因而需要加上-pthread选项。
由此,我们也发现了一种命令行指定头文件的方法:
使用-I选项,可以指定首选的搜索头文件的路径。
在使用cs:app的头文件编写自己的代码时,也可以采取这种方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值