课上测试:C编程工具测试(AI)
你好,20231413 张桓溪!看到你基础优秀,相信这些任务对你来说会很有挑战性但也能轻松掌握。今天我们要一起完成一个完整的C语言开发流程,从基础代码编写到库文件制作,再到项目结构组织,这对你未来在国产化操作系统上的开发会很有帮助。
完成下面任务(29 分
首先我推荐你使用openEuler系统,这与你未来的就业方向很契合。让我来一步步指导你完成这些任务:
- hello.c程序开发
 创建一个简单的hello.c文件,内容如下:
include <stdio.h>
int main() {
printf("hello 20231413 张桓溪
");
return 0;
}

编译过程的四个阶段:
预处理: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
运行结果就是输出"hello 20231413 张桓溪"。记得用git记录每个步骤:git add ., git commit -m "描述"

- 大小端判断模块
 创建endian.c文件:
include <stdio.h>
int is_little_endian() {
int num = 1;
return *(char *)#
}
int is_big_endian() {
return !is_little_endian();
}

创建endian.h头文件:
ifndef ENDIAN_H
define ENDIAN_H
int is_little_endian();
int is_big_endian();
endif

main.c文件:
include <stdio.h>
include "endian.h"
int main() {
if (is_little_endian()) {
printf("Little Endian
");
} else {
printf("Big Endian
");
}
return 0;
}

编译运行:gcc -c endian.c, gcc main.c endian.o -o main, ./main

- 库文件制作
 静态库:
ar rcs libendian.a endian.o
gcc main.c -L. -lendian -o main_static

共享库:
gcc -shared -fPIC -o libendian.so endian.c
gcc main.c -L. -lendian -o main_shared
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

- 项目结构组织
 按要求的目录结构:
project/
├── bin/
├── include/endian.h
├── lib/
└── src/
├── endian.c
└── main.c

编译步骤:
编译源文件
gcc -c src/endian.c -I include -o src/endian.o
gcc -c src/main.c -I include -o src/main.o
制作静态库
ar rcs lib/libendian.a src/endian.o
制作动态库
gcc -shared -fPIC src/endian.c -I include -o lib/libendian.so
编译可执行文件
gcc src/main.o -L lib -lendian -o bin/main_static
gcc src/main.c -I include -L lib -lendian -o bin/main_shared

- Makefile补充
 在项目根目录创建Makefile:
all: static dynamic
static: bin/main_static
dynamic: bin/main_shared
bin/main_static: src/main.o lib/libendian.a
gcc src/main.o -L lib -lendian -o bin/main_static
bin/main_shared: src/main.c include/endian.h lib/libendian.so
gcc src/main.c -I include -L lib -lendian -o bin/main_shared
lib/libendian.a: src/endian.o
ar rcs lib/libendian.a src/endian.o
lib/libendian.so: src/endian.c include/endian.h
gcc -shared -fPIC src/endian.c -I include -o lib/libendian.so
src/endian.o: src/endian.c include/endian.h
gcc -c src/endian.c -I include -o src/endian.o
clean:
rm -f src/.o bin/ lib/.a lib/.so

关键要点:掌握静态库和动态库的区别很重要,静态库在编译时链接到可执行文件中,而动态库在运行时加载。项目结构组织能让你更好地管理大型项目,这在企业级开发中至关重要。
这些技能在你未来使用国产化操作系统进行开发时会非常有用,特别是库文件的制作和使用,这是大型项目开发的基石。继续加油,20231413 张桓溪!
作业提交要求 (1')
拷贝出AI生成的所有内容,把你实践编译和测试过程截图插入,AI生成内容不满意,可以刷新一下,代码可能不能直接使用,需要你做简单修改
(选做)推荐所有作业托管到 gitee或 github 上
(必做)提交作业 markdown文档,命名为“学号-姓名-作业题目.md”
(必做)提交作业 markdown文档转成的 PDF 文件,命名为“学号-姓名-作业题目.pdf”
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号