如何使用gcc编译器

GCC编译的过程大约分为三个过程:预处理,优化与编译,链接;

 

首先看预处理阶段:预处理阶段要将源程序做一些处理,比如宏定义的替换等,最终生成的文件内容是汇编代码,GCC默认不生成这种中间代码的文件,但可以通过命令:

                                                           gcc -S example1.c -o example1.S

在这生成的example1.S就是一个汇编代码文件,注意其后缀不是非加不可的,实际上LINUX对后缀并不敏感,而是通过系统自动识别文件类型,但加上后缀,无疑对我们自己而言更具可读性。

 

优化与编译:

                 优化过程可以分为两类,一是对程序本身的优化,二是对程序能更好的适应特定机器硬件上的优化

                  编译就是对预处理过程生成的汇编代码进一步处理生成电脑能识别的二进制目标文件。

                使用命令:

                                gcc -c example1.c -o example1.o

                如果加入优化选项:

                                  gcc  -O -c example1.c -o example1.o

 

这里example1.o就是一个目标文件,目标文件仍然不是一个可以执行的文件,它要经过链接才能变成可执行文件

                命令:

                              gcc example1.c -o example1

生成的example1就是一个可执行文件,这里并不会产生example1.S 与example1.o的中间文件

 

下面对上述命令的格式做一个统一的说明:

                               gcc [选项]  源文件 [-o] 目标文件 

在这里,[选项]可以说控制的是gcc的执行操作,如果没有[选项],默认是将源文件,执行到生成可执行文件为止,就是预处理,编译与优化,链接一气呵成。

[-o]意味着是要对生成的文件命名,当然不是必须的,但既然生成的文件是自己需要与使用的文件,对其命上自己取的名字是完全有必要的。

 

下面来重点介绍:链接

 

链接分为:静态链接与动态链接

 

所谓静态链接:将所需要的函数库中的目标代码静态添加到可执行文件中

动态链接:将所需函数库的函数名,路径信息等添加到可执行文件中,执行过程中动态加载所需函数库

例如:一个主程序使用了printf函数,在静态链接下,它是将printf 函数代码加入到目标代码中,而动态连接中只是将printf在libc中的位置加入到目标代码中,在执行过程中再动态加载进去。动态链接的好处是,当要加载的函数库内部发生改变时,只需改变其函数库即可,无需改动主程序,也不需重新编译,而如果是静态链接,就得重新编译与外国链接。一般来说实行动态链接的目标文件相比实行静态链接的目标文件来说要小些。

 

下面看两个命令:

                          gcc -s example1.c -o example1 (指定动态链接)

                          gcc example1.c -o example1    (默认静态链接)

 

 

 

生成(函数)库文件:一般可大分为两种函数库文件 静态函数库与动态(共享)函数库

 

创建静态函数库过程:  gcc -c   example1.c -I(所需头文件所在目录) -o example1.o

                                 gcc -c   example2.c -I(所需头文件所在目录) -o example2.o 

 

                                ar -rv libexample.a  example1.o example2.o (创建静态函数库,将这两个目标文件添加至函数库中)

 

                                ar -tv libexample.a       (查看函数库中文件)

 

静态链接函数库:   gcc   example.c -I(所需头文所在目录) -L(所需函数库所在目录) -lexample(指定所需的函数库名) -o example                               

动态链接函数库: gcc   -s example.c -I(所需头文所在目录) -L(所需函数库所在目录) -lexample(指定所需的函数库名) -o example 

 

 

 

创建动态函数库过程:  gcc  -fPIC -c   example1.c -I(所需头文件所在目录) -o example1.o  

                                 gcc  - fPIC -c   example2.c -I(所需头文件所在目录) -o example2.o 

 

                             gcc -shared example1.o example2.o -o libexample.so  (创建动态函数库,将这两个目标文件添加至函数库中)

 

静态链接函数库:      gcc   example.c -I(所需头文所在目录) -L(所需函数库所在目录) -lexample(指定所需的函数库名) -o example 

 

动态链接函数库: gcc   -s example.c -I(所需头文所在目录) -L(所需函数库所在目录) -lexample(指定所需的函数库名) -o example 

 

 

注意要指定LD_LIBRARY_PATH至函数库文件所在目录,才能正常使用函数库

 

 

echo $LD_LIBRARY_PATH (查看)

export LD_LIBRARY_PATH=./ (赋值) 

 

 

 

 

 

 

 

 

### 配置和使用GCC编译器的方法 在Windows系统上配置和使用GCC编译器可以通过多种方式实现,以下是详细的步骤和说明。 #### 1. 安装MinGW工具集 MinGW(Minimalist GNU for Windows)是一套用于Windows的GNU工具集合,其中包含GCC编译器。安装MinGW可以提供一个接近Linux环境的开发体验[^2]。 - **下载与安装** 访问MinGW官方网站[^5],下载安装程序`mingw-get-setup.exe`。运行该文件后,按照提示完成安装过程。默认情况下,MinGW会将GCC及其相关工具安装到指定目录中。 - **验证安装路径** 确认MinGW的安装路径,例如`C:\MinGW`。此路径下的`bin`子目录包含可执行文件`gcc.exe`。 #### 2. 配置环境变量 为了能够在命令行中直接调用GCC编译器,需要将其路径添加到系统的环境变量中。 - 打开“系统属性”对话框,进入“高级系统设置”,点击“环境变量”。 - 在“系统变量”部分找到`Path`变量,点击“编辑”。 - 将MinGW的`bin`目录路径(如`C:\MinGW\bin`)添加到`Path`变量中[^1]。 - 确保路径分隔符为英文半角分号`;`。 #### 3. 验证GCC是否正常工作 打开命令提示符(CMD),输入以下命令以检查GCC版本信息: ```bash gcc -v ``` 如果返回GCC的版本号及相关信息,则表明安装和配置成功[^5]。 #### 4. 使用GCC编译C/C++代码 假设有一个名为`example.c`的源代码文件,可以通过以下命令进行编译: ```bash gcc example.c -o example ``` 上述命令将生成一个名为`example.exe`的可执行文件。运行该文件即可查看程序输出结果。 #### 5. 配置IDE(可选) 对于更复杂的项目开发,可以将GCC编译器集成到IDE中,例如CLion或Dev-C++。具体步骤如下: - **CLion配置** 在CLion中创建新项目时,选择“CMakeLists.txt”作为构建系统,并确保CMake工具链指向MinGW的路径[^3]。 - **Dev-C++配置** 如果使用Dev-C++,其默认支持MinGW编译器。只需确认安装过程中选择了正确的编译器路径即可[^1]。 --- ### 注意事项 - 如果需要跨平台开发,建议选择MinGW-w64替代传统的MinGW,因为前者提供了更好的兼容性和性能[^4]。 - 在大型项目中,可以结合`make`工具进行自动化构建管理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值