首页 > 系统相关 >【linux上机实验】实验六 Linux开发工具的使用

【linux上机实验】实验六 Linux开发工具的使用

时间:2023-11-22 11:27:45浏览次数:37  
标签:文件 gcc linux 生成 编译 实验 Linux main hello

【前 言】

愿,所有相遇,都恰逢其时!

愿,此刻心头,正满怀欣喜!

                 ---你好,朋友,欢迎你!

1. 用gcc带不同参数编译下列hello.c程序。

#include <stdio.h>
int main(){
	printf(”Hello World!\n”);
	return 0;
}

(1)只作预处理,不进行编译,相应命令为:gcc -E hello.c
(2)只进行编译,不做汇编,生成hello.s,命令为:gcc -S hello.c
(3)只生成目标文件,不做连接,生成hello.o,命令为:gcc -c hello.c
(4)以默认方式生成可执行程序a.out,命令为:gcc hello.c
(5)生成可执行程序hello.out,命令为:gcc -o hello.out hello.c
(6)生成可调试的可执行程序hello.out,命令为:gcc -g -o hello.out hello.c

gcc的常用选项:
 -c :只编译,不链接,生成目标文件“.o”。
 -S :只编译,不汇编,生成汇编代码“.S”。
 -E :只进行预编译/预处理,不做其他处理。
 -o file:输出文件名为file
 -g :在可执行程序中包含标准调试信息。
 -v :打印出编译器内部编译各过程的命令行信息和编译器的版本。
 -I dir :在头文件的搜索路径列表中添加dir目录
 -L dir :在库文件的搜索路径列表中添加dir目录
 -static :连接静态库(静态库也可以用动态库链接方式链接)
 -llibrary :连接名为library的库文件(显示指定需要链接的动态库文件)

2. Linux下用gcc的生成和使用动态库和静态库。

(1)要求学生按下述给出的步骤,在命令行上运行给出的命令。
(2)熟悉gcc编译运行c程序的三种思路,掌握静态库、动态库的创建和使用。

程序1: 创建hello.h文件

在命令行中输入以下命令,创建hello.h 文件:nano hello.h
image

在编辑器中,将以下内容粘贴到 hello.h 文件中:
#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif

按下 Ctrl + X,然后按 Y 保存并退出编辑器。


#ifndef HELLO_H 
#define HELLO_H 
  void hello(const char *name); 
 #endif
程序2:hello.c 
#include <stdio.h> 
void hello(const char *name) { 
		printf("Hello %s!\n", name); 
}
程序3:main.c 
#include "hello.h" 
 int main(){ 
	 hello("everyone"); 
	 return 0; 
 }
注意:用gcc –o 编译hello.c,gcc将报错。这个道理非常简单,hello.c是一个没有main函数的.c程序,因此不够成一个完整的程序。无论静态库,还是动态库,都是由.o文件创建的。因此,我们必须将源程序hello.c通过gcc先编译成.o文件。
这个时候我们有三种思路:
1) 通过编译多个源文件,直接将目标代码合成一个.o文件。
2) 通过创建静态链接库libmyhello.a,使得main函数调用hello函数时可调用静态链接库。
3) 通过创建动态链接库libmyhello.so,使得main函数调用hello函数时可调用动态链接库。
思路一:编译多个源文件
	只生成目标文件,不进行链接。即生成hello.o,main.o。
命令:$gcc –c hello.c main.c
用命令查看生成的文件(截屏给出查看结果):



创建 hello.c 文件:
在命令行中输入以下命令,创建并编辑 hello.c 文件:
nano hello.c
在编辑器中,将以下内容粘贴到 hello.c 文件中:
#include <stdio.h>
void hello(const char *name) {
	printf("Hello %s!\n", name);
}
按下 Ctrl + X,然后按 Y 保存并退出编辑器。

创建 main.c 文件:
在命令行中输入以下命令,创建并编辑 main.c 文件:
nano main.c
在编辑器中,将以下内容粘贴到 main.c 文件中:
#include "hello.h"
int main() {
	hello("everyone");
	return 0;
}
按下 Ctrl + X,然后按 Y 保存并退出编辑器。

现在,已经成功创建了 hello.h、hello.c 和 main.c 三个文件。

标签:文件,gcc,linux,生成,编译,实验,Linux,main,hello
From: https://www.cnblogs.com/whwh/p/17848542.html

相关文章

  • linux文件权限1
    基本权限UGO文件和文件目录的所有者:u——User文件和文件目录的所属组:g——Group其他用户:o——Other文件类型d:文件夹-:普通文件l:软链接(类似Windows的快捷方式)b:块设备文件(例如硬盘、光驱等)文件基本权限r:读权限——对于文件指可以查看文件内容;对于目录指可以浏览该目录......
  • Linux操作系统no.8
    第六章:I/O重定向1.I/O重定向案列 2.在/proc下查看进程文件 3.输出重定向,其中  > 表示覆盖, >> 表示追加 4.错误输出重定向: 5.重定向综合案例:使用echo命令重定向: ......
  • Linux多线程
    文章参考:爱编程的大丙(subingwen.cn)一.线程概述线程是一种轻量级的,在Linux环境下,由于Linux内核起初并未设计线程,只有进程,因此将线程本质上仍是进程。而在实际处理中,进程是操作系统最小的分配资源单位,而线程是操作系统最小的调度执行单位。区别如下:空间上:每一个进程都有......
  • linux11.08课堂随笔
    第5章进程管理一、静态查看进程ps命令可以查看静态进程,仅仅是捕捉某一个瞬间某一个进程的状态,类似于给进程制作快照。1.查看进程psaux2.查看CPU占用率psaux--sort-%cpu3.查看UID、PID、PPID等信息ps-ef快速查找psaxo命令自定义显示的字段4.查看指定进程PID(1)cat......
  • Linux第三次博客
     这次主要讲了第四章的内容——文件权限。 其中,讲了基本权限UGO。U是属主(owner),G是属组(group),O其他用户(other)。三类用户分别设置了三种基本权限,三种权限为r读取(read)数字设定为4可读取文件内容,w写入(write)数字设定为2可修改文件内容,x执行(execute)数字设定为1可将文件作为命令执......
  • 初始Linux
    探索Linux:开源世界的支柱在当今科技的前沿,Linux操作系统一直是开源世界的支柱和关键元素。它不仅仅是一个操作系统,更是一个哲学,一种思想的象征。通过开源的特性,Linux向世界宣示着自由、透明和合作的力量。Linux的起源1980年代末,芬兰大学生LinusTorvalds开始着手创建一个......
  • Linux文件管理
    一:文件目录 根目录下常见的目录:bin:普通用户使用的命令(存放二进制可执行文件(ls,cat,mkdir等))boot:存放系统启动相关的文件dev:设备文件(硬件)etc:配置文件home:普通用户的文件root:root(超级管理)用户的HOMEsbin:管理员使用的命令tmp:临时文件usr:系统文件,相当于C:\Windowsva......
  • Linux进程管理
    5.1初识进程进程是已启动的可执行程序的运行实例。进程有以下组成部分。.已分配内存的地址空间。·安全属性,包括所有权凭据和特权。●程序代码的一个或多个执行线程。·进程状态。每个进程都有唯一的进程标识PID,一个PID只能标识一个进程,PPID为父进程ID,需要给该进程分配系......
  • linux读书笔记第6章
    在Linux的第6章中,主要学习了I/O重定向和管道的内容。以下是关于这两个主题的学习总结:1.I/O重定向:Linux中的I/O重定向是一种机制,可以将标准输入、标准输出和标准错误输出从默认的设备(通常是终端)重定向到其他地方。可以使用符号">"来将输出重定向到文件中,使用符号">>"来追加输......
  • 学习linux文件操作
    这节课开始学习文件和文件夹的创建、复制、移动和删除。touch命令让我能够创建新文件,cp和mv命令使我可以复制和移动文件或目录。对于文件删除,rm命令虽然强大,但也需要小心使用,以免误删重要文件。Linux的文件权限系统也是我学习的重要部分。chmod命令允许我更改文件的权限,而chown命......