云班课计算机基础知识答案,云班课上的作业

本文详细介绍了使用GCC进行C语言程序的编译过程,包括预处理、编译、汇编及链接等阶段,并展示了如何创建静态库与共享库,以及如何在主程序中调用这些库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1-vi .c文件 .h文件

本实验的过程在test/test4中:

代码:

20199302.h

ifndef HEAD_H

define HEAD_H

int add(int,int);

int sub(int,int);

int mul(int,int);

double div(int,int);

endif

acc1edfb8eca91c244b6c758107b2727.png

sub.c

include "20199302.h"

int sub(int a,int b)

{

return a-b;

}

4e5127a7831470f20853099e06567ede.png

add.c

include "20199302.h"

int add(int a,int b)

{

return a+b;

}

871f5ca0182d55e16fd07c2afea85d5c.png

mul.c

include "20199302.h"

int mul(int a,int b)

{

return a*b;

}

6ae81d05824f207bd6750956233f1b7d.png

div.c

include "20199302.c"

double div(int a,int b)

{

return a/b;

}

2babd3930e11dafa9a86c7561219706a.png

main.c

int main(void)

{

int a,b;

printf("enter two numbers:");

scanf("%d %d",&a,&b);

printf("sub:%d

",add(a,b));

printf("sub:%d

",sub(a,b));

printf("mul:%d

",mul(a,b));

printf("div:%lf

",div(a,b));

return 0;

}

1ef97ff84ab517efb4c1a56df5f57c93.png

编译:

eeaf2e33af647303199fdf36eba61237.png

出错,引用了错误的文件,应该改为.h,改正

e437adb425151d2b69d7105fd6ec266e.png

编译成功:

0fdf25d24353e3791f0a25c304bd8175.png

执行结果中除法有问题,但是代码没有问题,所以不知道是什么原因,如下图所示:

8213d2c2b4b34468a87801809bff8ff1.png

vi-2

GCC编译流程

预处理,头文件和宏定义:gcc -E 20199302.c -o 20199302.i

f3021261fd7ba8742b35f46cc6162288.png

编译阶段,将代码翻译成汇编语言:gcc -S 20199302.i -o 20199302.s

3705978759ab1af9b18757e93a30d109.png

汇编阶段,将.s文件转成目标文件,二进制目标代码 gcc -c 20199302.s -o 20199302.o

960f3443a70d7434b01ce8b91c369e77.png

最后一步

94c4498d45d675e65225a7488192efc3.png

vi-3

用gcc -g编译vi输入的代码

在main函数中设置一个行断点

在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点

提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

gcc -g hello.c -o main

Gdb main

b num

b 行数 if 表达式

r

q

bb22cda23f34f1ec500c3a0b2ae19637.png

vi-4

除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?

提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

静态库是一系列的目标文件(.o文件)的归档文件((lib+name).a文件);链接阶段,选择静态库,后缀名为“.a”,选择动态库,后缀名为“.so”。

静态链接库的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o;

静态库的使用:gcc -o 文件名 文件名.c -L. -lxxx

生成mymath.a静态库

使用mymath.a

ce233f59791a3cdfe64fc5b220299ec9.png

vi-5 1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?

2. 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

d4995dde42adfc4dd35db8207d010e4b.png

vi-6

1 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.

2 提交Make过程截图,要全屏,包含自己的学号信息

首先写makefile

91df30f7043e05d963d06dc4a8291df1.png

testmymath:main.o add.o sub.o mul.o div.o

gcc mian.o add.o sub.o mul.o div.o -o testmymath

main.o:main.c 20199302.h

gcc -c main.c -o main.o

add.o:add.c 20199302.h

gcc -c add.c -o add.o

sub.o:sub.c 20199302.h

gcc -c sub.c -o sub.o

mul.o:mul.c 20199302.h

gcc -c mul.c -o mul.o

div.o:div.c 20199302.h

gcc -c div.c -o div.o

clean:

rm -f *.o testmymath

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值