《深入理解计算机系统》关于csapp.h和csapp.c的编译问题

编译步骤如下:

1.我的当前工作目录为/home/sxh2/clinux,目录下有3个文件inet_aton.c csapp.h csapp.c。

2.编译csapp.c文件,命令为gcc -c csapp.c,生成目标文件csapp.o。

3.编译inet_aton.c文件,命令为gcc -c inet_aton.c,生成目标文件inet_aton.o。

4.链接目标文件csapp.o、inet_aton.o(由于csapp.c文件中有关于线程中部分,gcc编译的时候必须带 -lpthread,否则会出错的),命令为gcc -o main csapp.o inet_aton.o -lpthread,生成可执行文件main,运行即可。

在解决这个问题之前,我试了试网上的办法,不是很好,而且还是有错误。在此,我该正一下,也可以运行成功,但是不推荐使用。

步骤如下:

1.把csapp.h  csapp.c文件放到/usr/include(看的别人的方法是放到/usr/lib下,试了试不可以)

2.在csapp.h里面最后一行#end if之前添加:

#include <csapp.c>

其实这样就没有必要写csapp.c文件了,直接把csapp.c的文件内容拷贝到csapp.h 最后一行的#end if之前。但是这样就不能遵守接口和实现分离的原则。

3.csapp.c文件中有关于线程中部分,gcc编译的时候必须带 -lpthread,否则会出错的。

4.在要编译的文件头添加#include <csapp.h>

5具体的指令如下:gcc inet_aton.c -lpthread。

时间: 2024-10-21 21:00:07

《深入理解计算机系统》关于csapp.h和csapp.c的编译问题的相关文章

《深入理解计算机系统》关于csapp.h和csapp.c的编译问题(转)

编译步骤如下: 1.我的当前工作目录为/home/sxh2/clinux,目录下有3个文件inet_aton.c csapp.h csapp.c. 2.编译csapp.c文件,命令为gcc -c csapp.c,生成目标文件csapp.o. 3.编译inet_aton.c文件,命令为gcc -c inet_aton.c,生成目标文件inet_aton.o. 4.链接目标文件csapp.o.inet_aton.o(由于csapp.c文件中有关于线程中部分,gcc编译的时候必须带 -lpthread

深入理解计算机中的 csapp.h和csapp.c

csapp.h其实就是一堆头文件的打包,在http://csapp.cs.cmu.edu/public/code.html 这里可以下载.这是<深入理解计算机系统>配套网站. 在头文件的#end if前面加上一句#include “csapp.c”,因为那个头文件要把csapp.c文件包含了进去. linux没有自带csapp.h,所以要自己导入,放到 /usr/include的文件夹里面. 还有就是因为csapp.c中有关于线程的头文件,在用gcc的时候最后要加上-lpthread 如 #

深入理解计算机系统第二版习题解答CSAPP 2.7

下面的函数将输出什么结果? 1 const char *s = "abcdef"; 2 show_bytes((byte_pointer) s, strlen(s)); 其中字母'a'~'z'的ASCII码为0x61~0x7A. show_bytes()函数定义如下: 1 #include <stdio.h> 2 3 typedef unsigned char *byte_pointer; 4 5 void show_bytes(byte_pointer p, int n)

深入理解计算机系统第二版习题解答CSAPP 2.13

从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入都是一个数据字x和一个掩码字m.它们生成一个结果z,z是由根据掩码m的位来修改x的位得到的.使用bis指令,这种修改就是在m为1的每个位置上,将z对应的位设置为1.使用bic指令,这种修改就是在m为1的每个位置,将z对应的位设置为0. 只使用这两个函数实现C语言的按位|和^运算. 1 int bis

深入理解计算机系统第二版习题解答CSAPP 2.6

使用打印字节的方式可以知道十进制数12345的十六进制为0x00003039,十进制浮点数12345.0的十六进制为0x4640E400. 转换为二进制为 1 /* 2 0 0 0 0 3 0 3 9 3 00000000000000000011000000111001 4 ************* 5 4 6 4 0 E 4 0 0 6 01000110010000001110010000000000 7 8 */ 移动后有13位匹配. 已知十进制数3510593的十六进制为0x003591

深入理解计算机系统第二版习题解答CSAPP 2.12

对于下面的值,写出变量x的C语言表达式.代码应该对任何字长w≥8都能工作.我们给出当x=0x87654321以及w=32时表达式的结果,仅供参考. A.x的最低有效字节,其他位均为0.[0x00000021]. B.除了x的最低有效字节外,其他位都取补,最低有效字节保持不变.[0x789ABC21]. C.x的最低有效字节设置成全1,其他字节都保持不变.[0x876543FF]. 解答: A. x & 0xFF B. ~(x ^ 0xFF)或者(~x) ^ 0xFF C. x | 0xFF

深入理解计算机系统第二版习题解答CSAPP 2.18

将32位补码表示的数转换为10进制数. 32位补码 十进制 0x1b8 440 0x14 20 0xFFFFFE58 -424 0xFFFFFE74 -396 0x44 68 0xFFFFFEC8 -312 0x10 16 0xC 12 0xFFFFFEEC -276 0x20 32

深入理解计算机系统第二版习题解答CSAPP 2.19

在2.17的基础上完成下表: x 十六进制 T2U(x) -8 0x8 8 -3 0xD 13 -2 0xE 14 -1 0xF 15 0 0x0 0 5 0x5 5

深入理解计算机系统第二版习题解答CSAPP 2.17

假设w=4,我们能给每个可能的十六进制数字赋予一个数值,假设用一个无符号或者补码表示.完成下表: x 无符号(B2U(x)) 补码(B2T(x)) 十六进制 二进制 0xE 1110 14 -2 0x0 0000 0 0 0x5 0101 5 5 0x8 1000 8 -8 0xD 1101 13 -3 0xF 1111 15 -1