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

标题。

你好,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程序从源代码到可执行文件的完整流程,这是编程基础中的核心知识。

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

任务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
制作和使用库是大型项目中的常见实践,能减少代码冗余并提高效率。

任务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
这个任务强化了目录结构和构建命令的使用,为你未来的项目开发打下基础。

任务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,你能更好地管理复杂项目的构建过程。

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

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

屏幕截图 2025-09-25 144434

屏幕截图 2025-09-25 144548

http://www.hskmm.com/?act=detail&tid=16977

相关文章:

  • 虚拟机下的麒麟V10SP1与SP2进行iSCSI连接——基于MobaXterm
  • 中断的基本概念
  • AT_arc173_e [ARC173E] Rearrange and Adjacent XOR
  • 修复gradle8使用Transform第一个构建中断第二次构建失败的问题:java.io.IOException: Unable to delete directory xxxx\build
  • .NET操作Word/WPS打造专业文档 - 页面设置与打印控制完全指南
  • NORDIC蓝牙6.0新品NRF54L15多协议超低功耗高性能BLE芯片 - 动能世纪
  • 记录:git、.${index}. 滚动条
  • 使用springboot开发一个宿舍管理系统练习项目 - 实践
  • 元组
  • CF1542
  • Manim实现涟漪扩散特效
  • CRMEB标准版PHP移动订单功能深度解析:多端同步方案
  • CICD流程建设之持续测试实践指南
  • Xcode 26.0.1 (17A400) 发布 - Apple 平台 IDE
  • Tenable Nessus 10.10 (macOS, Linux, Windows) - 漏洞评估解决方案
  • CNN+MNIST - 实践
  • SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
  • 超快轻量级离线翻译服务器MTranServer在腾讯云轻量应用服务器上的全流程部署指南 - 实践
  • 微算法科技(NASDAQ: MLGO)利用高级 Blowfish 加密标准实现区块链集成信息共享
  • 专业讲解大模型登记(纯干货)
  • Docker常用命令速查
  • 离线安装docker
  • MX 练石 2025 NOIP #9
  • dockerfile
  • PostgreSQL 的索引Ooracle、Mysql索引的类型对比和说明
  • Docker打包CMake项目镜像操作步骤
  • Linux dmesg 内核日志查看工具详解
  • 【智慧】 gym104385
  • __repr__魔术方法
  • 基于萤火虫算法(FA)优化支持向量机(SVM)参数的分类实现