20231302-邱之钊-C编程工具测试

你好,20231302 邱之钊!很高兴看到你正在学习Linux C编程,这对你未来在国产化操作系统上的就业非常有帮助。我会根据你的中等基础,详细讲解每个步骤,帮助你更好地理解和掌握这些知识。让我们一起努力,逐步完成这些任务!

完成下面任务(29 分

首先,我推荐你使用 openEuler 系统来完成这些任务,因为它更贴近你未来的就业环境。我会从基础开始,一步步引导你,确保你能跟上。

任务1:编写 hello.c 并编译运行

在这个任务中,你需要编写一个简单的C程序,打印出你的学号和名字,然后使用gcc命令完成编译预处理、编译、汇编和链接的过程,并用git记录。关键步骤包括:编写代码、使用gcc分步编译、运行程序并验证输出,以及使用git进行版本控制。这对于理解C程序的编译过程非常重要。

先创建一个目录来存放你的项目文件:

mkdir -p ~/project1
cd ~/project1

编写 hello.c 文件:

#include <stdio.h>

int main() {
    printf("hello 20231302 邱之钊");
    return 0;
}

现在,使用gcc命令分步编译:

预处理:gcc -E hello.c -o hello.i – 这会处理头文件和宏,生成预处理后的文件 hello.i。
编译:gcc -S hello.i -o hello.s – 将预处理后的代码编译成汇编代码 hello.s。
汇编:gcc -c hello.s -o hello.o – 将汇编代码转换成目标文件 hello.o。
链接:gcc hello.o -o hello – 将目标文件链接成可执行文件 hello。
运行程序:./hello,输出应该是 "hello 20231302 邱之钊"。

使用git记录过程:

git init
git add hello.c hello.i hello.s hello.o hello
git commit -m "添加hello.c和编译过程文件"

这个任务帮助你理解C程序从源代码到可执行文件的完整流程,这是编程基础中的核心知识。

屏幕截图 2025-09-25 144434

屏幕截图 2025-09-25 144548

任务2:判断电脑是大端还是小端

在这个任务中,你需要编写至少两个函数来判断电脑的字节序(大端或小端),并在main函数中调用它们。字节序指的是数据在内存中的存储顺序,大端是高位字节在前,小端是低位字节在前。这在网络编程和底层开发中很常见。

先创建一个新目录:

mkdir -p ~/project2

cd ~/project2

编写一个头文件 endian.h:

#ifndef ENDIAN_H
#define ENDIAN_H

int is_big_endian();
int is_little_endian();

#endif

编写源文件 endian.c:

#include "endian.h"

int is_big_endian() {
    unsigned int num = 0x1;
    char *byte = (char *)#
    return (byte[0] == 0);
}

int is_little_endian() {
    unsigned int num = 0x1;
    char *byte = (char *)#
    return (byte[0] == 1);
}

编写 main.c:

#include <stdio.h>
#include "endian.h"

int main() {
    if (is_big_endian()) {
        printf("This computer is big endian.");
    } else if (is_little_endian()) {
        printf("This computer is little endian.");
    } else {
        printf("Unknown endianness.");
    }
    return 0;
}

编译和运行:

gcc -c endian.c -o endian.o
gcc main.c endian.o -o main
./main

输出会告诉你电脑的字节序。这个任务让你实践函数模块化和调用,同时学习底层内存知识。
image

image

任务3:制作和使用静态库与共享库

现在,你将把上面的代码制作成静态库和共享库。静态库在编译时链接到程序中,而共享库在运行时动态加载,这提高了代码的复用性和可维护性。

首先,创建静态库:

ar rcs libendian.a endian.o

使用静态库编译:

gcc main.c -L. -lendian -o main_static

创建共享库:

gcc -shared -fPIC endian.c -o libendian.so

使用共享库编译:

gcc main.c -L. -lendian -o main_shared

运行前,设置库路径:

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./main_shared

制作和使用库是大型项目中的常见实践,能减少代码冗余并提高效率。
image

任务4:按指定结构组织代码并编译

在这个任务中,你需要将代码按bin、include、lib、src目录组织,然后编译和使用库。这模拟了真实项目的结构,有助于你学习项目管理和构建流程。

创建目录结构:

mkdir -p project4/{bin,include,lib,src}

移动文件:

将 endian.h 放到 include/
将 endian.c 和 main.c 放到 src/
编译后,可执行文件放到 bin/,库文件放到 lib/

编译步骤:

cd src
gcc -c endian.c -o ../lib/endian.o
ar rcs ../lib/libendian.a ../lib/endian.o
gcc -shared -fPIC endian.c -o ../lib/libendian.so
gcc main.c -I../include -L../lib -lendian -o ../bin/main

运行:

cd ../bin
export LD_LIBRARY_PATH=../lib:$LD_LIBRARY_PATH
./main

这个任务强化了目录结构和构建命令的使用,为你未来的项目开发打下基础。
image

任务5:补充Makefile

最后,你需要为项目编写一个简单的Makefile。Makefile自动化了编译过程,提高了开发效率,是Linux编程中不可或缺的工具。

在项目根目录创建 Makefile:

main: src/main.c src/endian.c include/endian.h
	gcc -Iinclude src/main.c src/endian.c -o bin/main

clean:
	rm -f bin/main

使用make编译:

make
make clean

通过学习Makefile,你能更好地管理复杂项目的构建过程。
image

20231302 邱之钊,这些任务涵盖了C编程的基础到进阶知识,包括编译过程、模块化、库的使用和项目结构。我鼓励你动手实践,每一步都自己尝试一遍。如果有问题,随时问我!坚持练习,你会逐步掌握这些技能,为未来的职业生涯做好准备。加油!

作业提交要求 (1')

拷贝出AI生成的所有内容,把你实践编译和测试过程截图插入,AI生成内容不满意,可以刷新一下,代码可能不能直接使用,需要你做简单修改
(选做)推荐所有作业托管到 gitee或 github 上
(必做)提交作业 markdown文档,命名为“学号-姓名-作业题目.md”
(必做)提交作业 markdown文档转成的 PDF 文件,命名为“学号-姓名-作业题目.pdf”

posted @ 2025-09-25 15:00  20231302邱之钊  阅读(11)  评论(0)    收藏  举报