Linux编程环境

news2025/1/14 18:21:16

一、实验目的

1.熟悉Linux下C语言程序设计的基本步骤

2.掌握gcc编译器的各种参数的使用方法

3.掌握gcc编译器创建函数库的方法

4.掌握gdb调试程序的方法

5.掌握多文件编译中的makefile的用法

二、实验软硬件要求

  1.CPU:P4 1.6GHz   内存:1G

  2.Windows7操作平台,Vmware虚拟机

三、实验预习

  1.Linux编辑器vi的使用

  2. GCC编译器

  3. GDB调试器

4. Make工程管理器

四、实验内容(实验步骤、测试数据等)

(一)编辑以下程序,按要求编译运行。

#include <stdio.h>

int main(void)                      

{

  double counter;                    

  double result;

  double temp;

  for (counter = 0; counter < 4000.0 * 4000.0 * 4000.0 / 20.0 + 2030;counter += (5 - 3 +2 + 1 ) / 4)

   {

   temp=counter/1239;

   result=counter;

   }

   printf("运算结果是:%lf\n", result);

}

1.分别利用gcc的预处理,编译,汇编,链接命令生成test.itest.stest.o文件,分别用ls命令显示,要求有相应的命令和截图;

1-1生成文件test.c

 

1-2生成test.i

gcc -E test.c -o test.i

 

1-3生成test.s

gcc -S test.i -o test.s

 

1-4生成test.o

gcc -c test.s -o test.o

 

1-5ls展示

 

2.分别使用不同的优化选项O0~O3,进行编译生成可执行程序m0~m3,然后使用time命令统计程序的运行,如 time. /m0,比较运行时间。要求有运行截图和必要的分析。

2-1生成可执行程序

gcc -O0 -o m0 test.c

gcc -O1 -o m1 test.c

gcc -O2 -o m2 test.c

gcc -O3 -o m3 test.c

ls

 

time ./m0

time ./m1

time ./m2

time ./m3

 

(二)编写如下程序hello.h,hello.c,main.c

hello.h

   void hello(const char *name);

hello.c

   #include<stdio.h>

   void hello(const char *name)

   { printf(“hello %s”,name);

}

main.c

   #include“hello.h”

   int main()

   {  hello(“everyone”);

      return 0;

   }

1.分别编辑以上三个源程序,并截图;

1-1生成源文件

cat >>hello.h

cat >>hello.c

cat >>main.c

 

2.利用gcc c命令将hello.c编译成.o文件,并用ls命令查看。

gcc -c hello.c -o hello.o

 

好家伙,报错

 

两个引号的问题

ls

 

3. 利用以下命令,将.o文件创建静态库,并用ls查看。

ar  crv  libmyhello.a  hello.o

注:静态库的命名规范是以lib为前缀,紧跟静态库名,扩展名为.a

 

4.在程序中调用生成的静态库文件,运行程序查看输出结果。

gcc -o hello  main.c  -L. -lmyhello

./hello

 

5.删除库文件libmyhello.a再运行hello程序测试hello程序是否链接了该库文件。

rm libmyhello.a

./hello

 

6.创建动态函数库,得到动态库文件libmyhello.so,并用ls命令查看。

 gcc  –shared  -fPIC  -o  libmyhello.so  hello.o

gcc -fPIC -shared hello.c -o libmyhello.so

用自己的命令来

 

7.使用动态函数库,运行程序,观察运行结果。

gcc  -o  hello  main.c  -L.  -lmyhello

若出错,执行mv libmyhello.so  /usr/lib

 

(三)设计一程序,要求计算输入的整数的平均值,将程序分成多个文件编译

(main.c,average.c,average.h),并编写makefile文件;用make编译后改成返回最小值再编译。

//main.c

#include "average.h"

main()

{   float a,b,ave;

    float average(float a,float b);

    ave=average(a,b);

  }

//average.c

#include<stdio.h>

float average(float a,float b)

{  float ave;

   scanf("%f,%f",&a,&b);

   ave=(a+b)/2;

 printf("average is %f\n",ave);

   return(ave);

}

//average.h

float average(float a,float b);

Makefile

#It is an example for describing  makefile

edit:main.o average.o

gcc -o edit main.o average.o

main.o: main.c average.h

gcc -c main.c

average.o:average.c average.h

gcc -c average.c

1-1生成多个文件

cat >>main.c

cat >>average.c

cat >>average.h

cat >>Makefile

 

 

这里的average.h里面要记得删除makefile部分

1-2

gcc average.c main.c -o test

./test

 

make

 

./edit

 

五、实验体会

实验比较简单,gcc命令需要加强练习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/74593.html

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

相关文章

matlab学习笔记(八)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 matlab学习笔记&#xff08;八&#xff09;一、傅里叶变换的MATLAB求解二、连续时间信号的频谱图三、MATLAB分析LTI系统的频率特性一、傅里叶变换的MATLAB求解 MATLAB的symb…

大学生网页设计制作作业实例代码 (全网最全,建议收藏) HTML+CSS+JS

文章目录&#x1f4da;web前端期末大作业 (1500套) 集合一、网页介绍二、网页集合三、作品演示A电影主题B漫画主题C商城主题D家乡主题E旅游主题F餐饮/美食主题G环境主题H游戏主题I 个人主题K体育主题L博客主题M汽车主题N文化主题P美妆主题Q企业主题R教育主题S其他主题&#x1f…

Docker的私有仓库部署——Harbor

一.Docker原生私有仓库—— Registry 1.1 Registry的简单了解 关于Docker的仓库分为私有库和公有仓库&#xff0c;共有仓库只要在官方注册用户&#xff0c;登录即可使用。但对于仓库的使用&#xff0c;企业还是会有自己的专属镜像&#xff0c;所以私有库的搭建也是很有必要的…

力扣(LeetCode)1780. 判断一个数字是否可以表示成三的幂的和(C++)

进制转换 转换 333 进制&#xff0c;如果每一位非 000 即 111 &#xff0c;returntruereturn\ truereturn true (数字 000 除外&#xff09;。 如果任意一位为 222 &#xff0c;returnfalsereturn\ falsereturn false 。 证明: 对于第 ppp 位&#xff0c; 如果 p0p0p0 &#…

数据结构——树和二叉树最全总结(期末复习必备)

目录 树和二叉树 树的基本术语&#xff08;均以上图b为例&#xff09;&#xff1a; 遍历二叉树&#xff1a; 线索二叉树&#xff1a; 树的存储结构&#xff1a; 树与二叉树的转换&#xff08;利用的就是把二叉树和树表示成相同的二叉链表&#xff09;&#xff1a; 森林与二…

KubeSphere 接入外部 Elasticsearch 最佳实践

作者&#xff1a;张坚&#xff0c;科大讯飞开发工程师&#xff0c;云原生爱好者。 大家好&#xff0c;我是张坚。今天来聊聊如何在 KubeSphere 中集成外置的 ES 组件。 KubeSphere 在安装完成时候可以启用日志组件&#xff0c;这样会安装 ES 组件并可以收集所有部署组件的日志…

索引优化学习

背景 最近做查询优化&#xff0c;学到的。字段长度&#xff0c;索引长度联合索引计算是否使用范围查询使用索引 字段长度&#xff08;varchar&#xff09; 只谈论varchar&#xff1a;首先我们建表varchar(20) 中的20是字符数。看你的数据库编码 执行&#xff1a;show creat…

支持多种网关类型!米尔基于Zynq-7010/20开发平台工业网关设计应用

随着工业物联网的飞速的发展&#xff0c;5G时代的到来&#xff0c;工业控制系统在生产领域应用越来越广泛&#xff0c;工业物联网为未来工业控制系统灵活性和可扩展性的需求提供了支持。工业物联网使我们的生产数据可以进行规模化集中存储&#xff0c;并利用高速采集、云计算等…

ChatGPT国产平替出现了:APP商店就能下载,还可给AI加人设,背后公司刚成立3个月...

明敏 发自 凹非寺量子位 | 公众号 QbitAIChatGPT太火爆谁不想上手试试&#xff1f;但注册复杂、服务器拥挤……着实有点麻烦。不过很快就有极客网友指路&#xff0c;说国内其实已经有类似的APP上线了&#xff0c;也是上知天文下知地理的那种。比如聊聊《三体》&#xff0c;还会…

Transformer 训练优化

前言 自 BERT 出现以来&#xff0c;NLP 领域已经进入了大模型的时代&#xff0c;大模型虽然效果好&#xff0c;但是毕竟不是人人都有着丰富的 GPU 资源&#xff0c;在训练时往往就捉襟见肘&#xff0c;出现显存 out of memory 的问题&#xff0c;或者训练时间非常非常的久&…

web期末大作业:基于html+css+js制作深圳大学网站(13页) 学校班级网页制作模板 学生静态HTML网页源码

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【easypoi 模板导出嵌套 list 问题】

easypoi 模板导出多 list 问题1背景1.1 espoi 模板定义1.2 导出结果1.3发现共享单车的数据没有显示&#xff0c;手动操作取消共享单车的单元格合并1.4手动取消单元格合并后数据&#xff0c;正常再把框线画好1.5 代码操作&#xff1a;用 esaypoi 处理到1.2&#xff0c;用基础 po…

聊聊与前端工程师天然互补的 Serverless

作为前端工程师&#xff0c;我们的使命是为用户提供良好的前端用户体验。随着云原生时代的到来&#xff0c;显而易见的&#xff0c;我们能做的更多了。Serverless 产品的特点是免运维、按量付费和自适应弹性&#xff0c;所以我们可以利用云上的各种 Serverless 能力&#xff0c…

《程序员的自我修养》程序实现的两大环境

学习内容 翻译环境 预处理 编译 汇编 链接 执行环境 在标准C的任何一种实现中&#xff0c;都存在两个不同的环境&#xff1a; 1.翻译环境&#xff1a;在这个环境中&#xff0c;源代码被翻译成为可执行的机器指令。 2.执行环境&#xff1a;用于执行实际的代码 在VS2022中&…

字符串的读入方式

文章目录1、scanf2、fgets()3、cin4、cin.getline()5、getline()1、scanf scanf只能读入不带空格的字符串&#xff0c;遇到空格则结束。scanf只能读入字符数组&#xff0c;不能读入string。scanf在读入的时候&#xff0c;会自动在字符串的末尾加上’\0’。定义字符数组长度时&…

虚表指针在C++类的继承/多态与重载中的基本逻辑

文章目录前言重载继承虚函数虚函数表动态绑定的实现析构函数构造函数多态子类直接继承父类的方法&#xff0c;不覆盖多重继承纯虚函数前言 C在C语言的基础上增加了类的概念&#xff0c;而类的最关键的特性就是三个&#xff1a; 继承多态重载 这篇文章想接着上两篇C相关的文章…

[附源码]Python计算机毕业设计SSM基于推荐算法的汽车租赁系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java动物爱心救助平台s9dza

首先选择计算机题目的时候先看定什么主题&#xff0c;一般的话都选择当年最热门的话题进行组题&#xff0c;就比如说&#xff0c;今年的热门话题有奥运会&#xff0c;全运会&#xff0c;残运会&#xff0c;或者疫情相关的&#xff0c;这些都是热门话题&#xff0c;所以你就可以…

HTML做一个抗疫逆行者感动人物页面(纯html代码)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

AI公平性研究进展(2022)

最近AI公平性方面出了不少新的研究成果&#xff0c;如有遗漏&#xff0c;欢迎补充↓↓↓↓ 公平性提升 MAAT: A Novel Ensemble Approach to Addressing Fairness and Performance Bugs for Machine Learning Software, FSE, 2022. 利用模型集成的方式获得公平的预测结果&am…