标题。

news/2025/9/25 15:01:56/文章来源:https://www.cnblogs.com/9q2z2z/p/19111230

你好,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.mzph.cn/news/917116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机下的麒麟V10SP1与SP2进行iSCSI连接——基于MobaXterm

好的!作为小白,我会带你一步一步完成 iSCSI 存储管理的配置。我会用最详细的方式解释每个步骤,确保你能完全理解。🎯 准备工作:理解你的环境 根据你的描述,你的环境是: Windows 11 主机 VMware Workstation 17…

中断的基本概念

在计算机执行程序的过程中,出现某些需要紧急处理的特殊情况或者特殊请求,cpu暂时终止现行程序。而转去对这些特殊情况处理,处理完毕后在返回到原程序的断点处。 工作流程 1.中断请求 中断源向cpu发送中断请求信号 2…

郑州市科协网站做农村电子商务的网站有哪些内容

LANMP简介 LANMP是指一组通常用来搭建动态网站或者服务器的开源软件&#xff0c;本身都是各自独立的程序&#xff0c;但是因为常被放在一起使用&#xff0c;拥有了越来越高的兼容度&#xff0c;共同组成了一个强大的Web应用程序平台。 L:指Linux&#xff0c;一类Unix计算机操作…

AT_arc173_e [ARC173E] Rearrange and Adjacent XOR

好家伙,标签一出来给我假完了。 刚开始以为是拆位对于每一位的每一层去做贪心,结果发现假了。 有一个很显然的性质是,答案一定由原序列若干个数异或得到,现在我们需要观察这些数有什么性质。 我们再仔细一想,如果…

修复gradle8使用Transform第一个构建中断第二次构建失败的问题:java.io.IOException: Unable to delete directory xxxx\build

问题描述 使用了gradle编译插件,编译插件使用的是Transform处理字节码,如果第一次ctrl+c中断或者其它原因中断,下次再次构建会出现build文件夹清理不了的问题 Execution failed for task :my-module:my-submodule:c…

.NET操作Word/WPS打造专业文档 - 页面设置与打印控制完全指南

本文将详细介绍如何使用MudTools.OfficeInterop.Word库来设置页面参数、管理页眉页脚以及控制文档打印。我们将深入探讨从基础的纸张设置到高级的分节页面控制,从简单的页眉页脚到复杂的多区域布局,以及如何精确控制…

NORDIC蓝牙6.0新品NRF54L15多协议超低功耗高性能BLE芯片 - 动能世纪

NRF54L15,NRF54L10,NRF54L05 是NORDIC推出的高性能,多协议,低功耗BLE6.0芯片 产品简介 增强的多协议支持nRF54L 系列支持低功耗蓝牙、蓝牙 Mesh、Thread、Matter、Zigbee、Amazon Sidewalk 和 2.4 GHz 专有协议,并…

记录:git、.${index}. 滚动条

解决问题:从底层找,从最开始的位置打日志,一步步节点去找问题发生的位置 记录、统计:各环境账号。。。上线:需要准备的资源、账号、人员 去掉debugger 1、提交代码;2、dev,fat,本地各种自测;3、new tag,改动…

快速入门HarmonyOS应用开发(三) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Docker + IDEA 一键部署! - 实践

Docker + IDEA 一键部署! - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

使用springboot开发一个宿舍管理系统练习项目 - 实践

使用springboot开发一个宿舍管理系统练习项目 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

有做兼职赚钱的网站吗12315可以查询营业执照吗

本文小编给大家分享的是腾讯视频下载的视频怎么导出来_手机腾讯视频怎么缓存视频电影。相比其它的视频客户端&#xff0c;腾讯视频的多维度筛选&#xff0c;大数据比对&#xff0c;更有利于用户发现和推荐自己喜爱的影视剧内容。腾讯视频播放器推荐精准&#xff0c;越用越懂你&…

seo网站制作网站专题报道页面怎么做的

最近开始阅读java底层的源码&#xff0c;是因为发现越到后面越发现读源码的重要性&#xff0c;真的很重要&#xff0c;不阅读源码&#xff0c;你会发现“路”越走越窄。 今天看到了String的这个构造方法&#xff0c; /*** Initializes a newly created {code String} object so…

深圳有做网站公司wordpress onethink

可以放在服务器上&#xff0c;对服务器上的文件进行浏览、上传、下载&#xff0c;可下载文件源码。把下所有代码入在一个文件里即可&#xff0c;文件的后缀要为asp。thedir request("thedir")if thedir "" thenfolderini server.mappath(".")…

云南省城乡住房与建设厅网站教育网站建设情况报告

在官网可编辑表格typescript样例里 const inputRef useRef<InputRef>(null); InputRef项目报错原因是ant design的版本问题! antd 4.19版本重写了input 可通过InputRef来使用input组件的ref

CF1542

简单题/简单题/简单计数题/中等计数题/优化计数题CF1542E2 Abnormal Permutation Pairs 既然要求了字典序,那么我们可以枚举两个排列的最长公共前缀长度 \(L\) 并钦定 \(p_{L+1}<q_{L+1}\),此时 \(L+1\) 之后的位…

Manim实现涟漪扩散特效

在视频制作和数据可视化领域,涟漪扩散特效是一种常见且富有视觉吸引力的动画效果。 本文将详细介绍如何使用Manim数学动画引擎来实现这一效果,包括其实现原理、使用示例以及应用场景。 1. 实现原理 涟漪扩散特效主要…

CRMEB标准版PHP移动订单功能深度解析:多端同步方案

添加的客服进移动端个人中心统计管理里面就可以管理订单 Git仓库:https://gitee.com/ZhongBangKeJi/CRMEB

PolarFire SOC Auto Update 和 IAP 文档阅读(四) IAP

PolarFire SOC Auto Update 和 IAP 文档阅读(四) IAP 文档来自:PolarFire FPGA and PolarFire SoC FPGA Programming User GuidePolarFire SOC Auto Update 和 IAP 文档阅读一 - 所长 - 博客园 PolarFire SOC Auto Up…

CICD流程建设之持续测试实践指南

本文来自腾讯蓝鲸智云社区用户: CanWay持续测试(CT)是在软件开发周期(SDLC)期间持续检查软件质量的过程。具体指每次更改代码时定期执行的自动化测试。持续测试可及早发现并修复问题,确保软件始终准备就绪并运行良…