当前位置: 首页 > article >正文

课下测试:C编程工具测试

一、实验任务

  • 在Ubuntu活openEuler中完成任务(推荐openEuler).
  • 编写C代码hello.c,打印“hello你的8位学号”,给出编译预处理,编译,汇编,链接的gcc命令,及其运行结果,使用git记录过程。(5分).
  • 编译附件中代码,给出运行结果。(5分)
  • 新建目录,拷⻉要求2中代码,把代码中的main函数都去掉,编写ble.h(包含五个判断函数),main.c通过命令行参数调用,比如./main1调用cebitwise.c中的功能。编译运行代码,给出运行结果。使用git记录过程(5分).
  • 新建目录,拷⻉要求3中代码,制作静态库libble.a,并调用libble.a,编译运行代码,给出运行结果。使用git
    记录过程(5分).
  • 新建目录,拷⻉要求3中代码,制作动态库libble你的八位序号.so,并调用libble.so,编译运行代码,给出运行结果。使用git记录过程(5分).
  • 新建目录,按下面目录拷⻉要求3中代码,编写Makefile编译运行代码,给出运行结果。使用git记录过程(4分)

二、实验步骤

1、编写hello.c

  1. 编写程序并运行

hello.c

// hello.c
#include <stdio.h>
int main() {
    printf("hello 20242817\n");
    return 0;
}
  1. 分步编译命令:
gcc -E hello.c -o hello.i    # 预处理
gcc -S hello.i -o hello.s    # 生成汇编代码
gcc -c hello.s -o hello.o    # 生成目标文件
gcc hello.o -o hello         # 链接生成可执行文件
  1. 运行结果:
./hello

实验截图如下:
在这里插入图片描述

  1. Git记录
git init
git add hello.c
git commit -m "Add hello.c"

在这里插入图片描述

2、编译附件中代码,给出运行结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、新建目录,拷⻉要求2中代码,把代码中的main函数都去掉,编写ble.h(包含五个判断函数),main.c通过命令行参数调用,比如./main1调用cebitwise.c中的功能

  1. 新建文件夹task3并把原文件夹中的文件进行拷贝
mkdir task3 && cd task3
cp ../cebitwise.c ../cebitfields.c ../celibrary.c ../cepointer.c ../ceunion.c .
  1. 删除所有main函数

以cebitfields.c 为例

#include <stdio.h>

void check_endian_bit_field() {
    struct {
        unsigned int a:8;
        unsigned int b:8;
        unsigned int c:8;
        unsigned int d:8;
    } test;

    test.d = 0x12;
    test.c = 0x34;
    test.b = 0x56;
    test.a = 0x78;

    unsigned char *p = (unsigned char *)&test;


    if (*p == 0x78) {
        printf("Little Endian (Bit-field Method)\n");
    } else  {
        printf("Big Endian (Bit-field Method)\n");
    }
}


在这里插入图片描述

  1. 编写头文件 ble.h
#ifndef BLE_H
#define BLE_H

void check_endian_bit_field();
void check_endian_bitwise();
void check_endian_standard();
void check_endian_pointer();
void check_endian_union();
#endif

  1. 编写主程序main.c
#include<stdlib.h>
#include <stdio.h>
#include "ble.h"

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("Usage: %s <option>\n", argv[0]);
        return 1;
    }

    int option = atoi(argv[1]);
    switch (option) {
        case 1:
            check_endian_bitwise();
            break;
        case 2:
            check_endian_pointer();
            break;
        case 3:
            check_endian_bit_field();
            break;
        case 4:
            check_endian_standard();
            break;
        case 5:
            check_endian_union();
            break;
        default:
            printf("Invalid option\n");
            break;
    }
    return 0;
}

  1. 编译并生成多个可执行文件

执行命令

gcc main.c cebitwise.c cepointer.c cebitfields.c celibrary.c ceunion.c -o main

在这里插入图片描述

  1. Git记录

在这里插入图片描述

4、制作静态库

  1. 新建目录并拷贝代码
mkdir task4 && cd task4
cp ../task3/* .
  1. 生成目标文件并打包静态库
gcc -c cebitwise.c cebitfields.c celibrary.c cepointer.c ceunion.c
ar rcs libble.a *.o
  1. 编译主程序并链接静态库
gcc main.c -L. -lble -o main1

在这里插入图片描述

  1. Git记录
git add .
git commit -m "Add static library libble.a"

在这里插入图片描述

5、新建目录,拷⻉要求3中代码,制作动态库libble你的八位序号.so,并调用libble.so,编译运行代码,给出运行结果。使用git记录过程

  1. 新建目录并拷贝代码
mkdir task5 && cd task5
cp ../task3/* .

`在这里插入图片描述

  1. 将目录所有.c文件转化为.o文件并打包成动态库
gcc -fPIC -c *.c 
gcc -shared -o libble20242817.so *.o 

在这里插入图片描述

  1. 调用动态库
gcc main.c -L. -lble20242817 -o main
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

在这里插入图片描述

  1. Git记录
git add .
git commit -m "Add dynamic library libble20242817.so"

在这里插入图片描述

6、新建目录,按下面目录拷⻉要求3中代码,编写Makefile编译运行代码,给出运行结果。使用git记录过程

  1. 新建目录并拷贝代码
mkdir task6 && cd task6
cp ../task3/* .
  1. 编写Makefile
CC = gcc
CFLAGS = -Iinclude
LDFLAGS = -Llib -lble20242817
SRCDIR = src
BINDIR = bin

all: main

main: $(SRCDIR)/main.c
	$(CC) $(CFLAGS) -o $(BINDIR)/main $(SRCDIR)/main.c $(LDFLAGS)

clean:
	rm -f $(BINDIR)/main
  1. 创建目录结构如下:

在这里插入图片描述

  1. 编译并运行
export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH
./bin/main 1

在这里插入图片描述

  1. Git记录
git add .
git commit -m "Add Makefile and directory structure"

在这里插入图片描述

7、提交git log结果

git log --oneline

在这里插入图片描述

8、AI问答过程

问题:
在这里插入图片描述

回答:

在这里插入图片描述


http://www.kler.cn/a/591743.html

相关文章:

  • shell脚本运维开发(持续更新...)
  • DeepSeek + 药物研发:解决药物研发周期长、成本高-降低80%、失败率高-减少40%
  • NO.42十六届蓝桥杯备战|数据结构|算法|时间复杂度|空间复杂度|STL(C++)
  • C++学习之云盘项目nginx
  • 无人机市场观察2025.3.18
  • 计算机网络进化论:从比特流到量子通信的深层解构
  • 使用Koa2快速搭建一个爬虫项目
  • C语言之数据结构:链表(一)
  • Web元件库 ElementUI元件库+后台模板页面(支持Axure9、10、11)
  • Spark 解析_spark.sparkContext.getConf().getAll()
  • Kafka详解——介绍与部署
  • 【Linux】Bash是什么?怎么使用?
  • 森林防火预警广播监控系统:以4G为纽带架构融合智能广播、远程监控、AI智能识别、告警提示、太阳能供电于一体的新一代森林防火预警系统
  • LeetCode 392. 判断子序列 java题解
  • 在 Ubuntu 中配置 NFS 共享服务的完整指南
  • C++ —— 线程同步(互斥锁)
  • OpenCV图像拼接(1)概述
  • 【Vue3+Vite指南】全局引入SCSS文件后出现Undefined mixin?一招解决命名空间陷阱!
  • 机器视觉工程师如何学习C#通讯
  • Flask实时监控:打造智能多设备在线离线检测平台(升级版)