当前位置: 首页 > 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.gsyq.cn/news/11587.html

相关文章:

  • 中断的基本概念
  • 修复gradle8使用Transform第一个构建中断第二次构建失败的问题:java.io.IOException: Unable to delete directory xxxx\build
  • 记录:git、.${index}. 滚动条
  • CRMEB标准版PHP移动订单功能深度解析:多端同步方案
  • Tenable Nessus 10.10 (macOS, Linux, Windows) - 漏洞评估解决方案
  • 超快轻量级离线翻译服务器MTranServer在腾讯云轻量应用服务器上的全流程部署指南 - 实践
  • 实用指南:【Cesium 开发实战教程】第六篇:三维模型高级交互:点击查询、材质修改与动画控制
  • MX 练石 2025 NOIP #9
  • OSS cp(下载文件)
  • 有范同城旅游广告小程序系统:赋能旅游行业数字化运营新生态
  • 完整教程:第八篇:GIL全局解释器锁:原理、影响与应对策略
  • 下载并安装ossutil
  • PDF论文文字公式提取,翻译与对照代码(自用)
  • 华为鸿蒙 ArkTS 实战:基于 RelationalStore 的 SQLite 实现本地数据持久化 - 实践
  • 从 0 到 1 精通 SkyWalking:分布式系统的 “透视镜“ 技巧全解析
  • PDF入参以及模板对应签章图踩坑点
  • Python 换进安装GDAL
  • sync(同步本地文件到OSS)
  • P2042 [NOI2005] 维护数列 题解
  • 别再靠 “关设备” 减碳!EMS 的 “预测性控能”,让企业满产也能达标双碳
  • 阿里云客服界面
  • 关于认证系统安全的产品能力补齐
  • kettle插件-国产数据库金仓插件,助力国产数据库腾飞
  • 挑战用R语言硬干一百万单细胞数据分析 - 指南
  • 呼叫中心开源社区专栏第一篇 - 详解
  • 完整教程:【设计模式】适配器模式
  • 原核表达可溶性蛋白难题破解
  • Torch中的tensor size
  • Codeforces 1053 (Div.2)
  • spring boot方案利用Torna生成在线接口文档