【前 言】
愿,所有相遇,都恰逢其时!
愿,此刻心头,正满怀欣喜!
---你好,朋友,欢迎你!
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
在编辑器中,将以下内容粘贴到 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