Vim or VSCode、gcc测试、gdb测试、静态库的测试、共享库的测试

week2目录

一、Vim or VSCode

  1. 每个*.c一个文件,每个*.h一个文件,文件名中最好有自己的学号
  2. 用Vim 或 VSCode输入图中代码,并用gcc编译通过
  3. 在Vim 中使用K查找printf的帮助文档(使用vim的)
  4. 提交Vim or VScode编辑过程截图,要全屏,包含自己的学号信息

代码如下:
add.c:

c 复制代码
#include "head.h"

int add(int a,int b){

        return a+b;

}   

div.c

c 复制代码
#include "head.h"

double div(int a,int b){

        return a/b;

}

mul.c

c 复制代码
#include "head.h"

int mul(int a,int b){

        return a*b;

}   

sub.c

c 复制代码
#include "head.h"

int sub (int a,int b){

	return a-b;

}

main.c

c 复制代码
#include <stdio.h>

int main(void){
	int a,b;
	printf("enter two numbers:");
	scanf("%d %d",&a,&b);
	printf("add:%d\n",add(a,b));
	printf("sub:%d\n",sub(a,b));
	printf("mul:%d\n",mul(a,b));
	printf("div:%d\n",div(a,b));
	for(int i=0;i<2831;i++);
        return 0;
} 

head.h

c 复制代码
#ifndef HEAD_H

#define HEAD_H

int add(int,int);

int sub(int,int);

int mul(int,int);

double div(int,int);

#endif

首先,创建这几个C语言文件及头文件

使用以下代码进行整体编译成一个文件。即2831:

bash 复制代码
gcc *.c -o 2831

再运行:

bash 复制代码
./2831

二、gcc测试

  1. 用gcc 进行预处理,编译,汇编,链接hello world程序,要求加一行打印自己学号姓名

  2. 生成的可执行文件中要有自己的8位学号

  3. 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息

新建helloworld.c文件

c 复制代码
#include<stdio.h>

int main(){
        printf("hello!20232831,ysc!");
} 

GCC编译C源码有四个步骤:预处理-----> 编译 ----> 汇编 ----> 链接

如果使用以下代码,则直接一步到位,同时完成四个步骤直接生成可执行文件

bash 复制代码
gcc helloworld.c -o helloworld

1、预处理(Pre-processing)

bash 复制代码
gcc -E helloworld.c -o helloworld.i

2、编译阶段(Compiling)

将预处理输出文件helloworld.i汇编成helloworld.s文件

bash 复制代码
gcc -S helloworld.i  -o helloworld.s

3、汇编阶段(Assembling)

汇编阶段是把编译阶段生成的".s"文件转成二进制目标代码

bash 复制代码
gcc -c helloworld.s  -o helloworld.o

4、链接阶段(Link)

bash 复制代码
gcc helloworld.o -o helloworld

5、执行可执行文件helloworld

三、gdb测试

  1. 用gcc -g编译测试1中输入的代码
  2. 在main函数中设置一个行断点
  3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
  4. 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

设置空循环如下:

gcc -g 生成main文件进行gdb测试(一定要生成,否则将出错)

bash 复制代码
gcc -g main.c add.c sub.c div.c mul.c head.h -o main

使用gdb进行测试

b 8设置行断点

b 11设置条件断点(因为空循环在11行)

n(一直按n,即表示next下一执行,直至代码运行结束)

bash 复制代码
gdb main  
b 8
b 11 if i==1415 ##2831学号的一半
run
n
n
...

运行到条件断点处,会卡住几秒,因为要进入2831个for循环

运行结束后如图

继续按n,next执行,直到结束
The program is not being run.

四、静态库的测试

  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
  2. 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

首先,分别编译四个.c文件

bash 复制代码
gcc -c add.c -o add.o
gcc -c sub.c -o sub.o
gcc -c div.c -o div.o
gcc -c mul.c -o mul.o

生成mymath.a静态库

bash 复制代码
ar rcsv mymath.a add.o sub.o div.o mul.o

生成main.o并与静态库进行链接,并生成link这个可执行文件进行调用静态库

bash 复制代码
gcc -c main.c -o main.o
gcc -static -o link main.o mymath.a

使用./link运行

bash 复制代码
./link

五、共享库的测试

  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
  2. 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

直接运行生成动态库和链接的代码

bash 复制代码
gcc -shared -fpic -o mymath.so add.c sub.c mul.c div.c
gcc -o link2 main.c ./mymath.so

更简单,结果如下

运行结果如下:

相关推荐
蓝丶曦月几秒前
MacM系列芯片安装 最新版本Notepad--(平替Windows系统的Notepad++)详细教程
编辑器·notepad++·mac
jun_bai1 小时前
VSCode使用
ide·vscode·编辑器
猫头虎2 小时前
OpenClaw-VSCode:在 VS Code 里玩转 OpenClaw,远程管理+SSH 双剑合璧
ide·vscode·开源·ssh·github·aigc·ai编程
CaracalTiger4 小时前
OpenClaw-VSCode:在 VS Code 中通过 WebSocket 远程管理 OpenClaw 网关的完整方案
运维·ide·人工智能·vscode·websocket·开源·编辑器
嵌入小生0076 小时前
Standard IO -- Continuation of Core Function Interfaces (Embedded Linux)
linux·vim·嵌入式·标准io·vscode
-嘟囔着拯救世界-6 小时前
【2026 最新版】OpenAI 祭出王炸 GPT-5.3-Codex!Win11 + VSCode 部署保姆级教程
vscode·gpt·chatgpt·node.js·node·codex·gpt5
爱吃生蚝的于勒6 小时前
【Linux】线程概念(一)
java·linux·运维·服务器·开发语言·数据结构·vim
Web极客码6 小时前
WordPress从经典编辑器升级到古腾堡编辑器
运维·编辑器·wordpress
江湖有缘6 小时前
Docker部署music-tag-web音乐标签编辑器
前端·docker·编辑器
嵌入小生0071 天前
标准IO---核心函数接口延续(嵌入式Linux)
c语言·vscode·vim·嵌入式·小白·标准io·函数接口