GCC编译常用命令

1 篇文章 0 订阅

GCC 编译命令

                                       ----------------加入新公司后,基本上是一键式打包脚本,对于GCC基本上快忘了,重新拾起。
GCC命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击了学习的信心。

一. 常用编译命令选项

假设源程序文件名为test.c。

1. 无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

2. 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

3. 选项 -E
用法:#gcc -E test.c -o test.i
作用:将test.c预处理输出test.i文件。

4. 选项 -S
用法:#gcc -S test.i
作用:将预处理输出文件test.i汇编成test.s文件。

5. 选项 -c
用法:#gcc -c test.s
作用:将汇编输出文件test.s编译输出test.o文件。

6. 无选项链接
用法:#gcc test.o -o test
作用:将编译输出文件test.o链接成最终可执行文件test。

7. 选项-O
用法:#gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

二. 多源文件的编译方法

如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]

1. 多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。

2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c   //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

3库文件连接

开发软件时,完全不使用第三方函数库的情况是比较少见的,通常来讲都需要借助许多函数库的支持才能够完成相应的功能。从程序员的角度看,函数库实际上就是一些头文件(.h)和库文件(so、或lib、dll)的集合。。虽然Linux下的大多数函数都默认将头文件放到/usr/include/目录下,而库文件则放到/usr/lib/目录下;Windows所使用的库文件主要放在Visual Stido的目录下的include和lib,以及系统文件夹下。但也有的时候,我们要用的库不再这些目录下,所以GCC在编译时必须用自己的办法来查找所需要的头文件和库文件。

例如我们的程序test.c是在linux上使用c连接mysql,这个时候我们需要去mysql官网下载MySQL Connectors的C库,下载下来解压之后,有一个include文件夹,里面包含mysql connectors的头文件,还有一个lib文件夹,里面包含二进制so文件libmysqlclient.so

其中inclulde文件夹的路径是/usr/dev/mysql/include,lib文件夹是/usr/dev/mysql/lib

 

3.1编译成可执行文件

首先我们要进行编译test.c为目标文件,这个时候需要执行

gcc –c –I /usr/dev/mysql/include test.c –o test.o
3.2链接

最后我们把所有目标文件链接成可执行文件:

gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test

Linux下的库文件分为两大类分别是动态链接库(通常以.so结尾)和静态链接库(通常以.a结尾),二者的区别仅在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。

3.3强制链接时使用静态链接库

默认情况下, GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库。

在/usr/dev/mysql/lib目录下有链接时所需要的库文件libmysqlclient.so和libmysqlclient.a,为了让GCC在链接时只用到静态链接库,可以使用下面的命令:

gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test

 

静态库链接时搜索路径顺序:

1. ld会去找GCC命令中的参数-L
2. 再找gcc的环境变量LIBRARY_PATH
3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的

动态链接时、执行时搜索路径顺序:

1. 编译目标代码时指定的动态库搜索路径
2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
4. 默认的动态库搜索路径/lib
5. 默认的动态库搜索路径/usr/lib

有关环境变量:
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径

---摘自:https://www.cnblogs.com/ibyte/p/5828445.html

更详细的介绍请参考:

https://blog.csdn.net/junmuzi/article/details/50924233

https://blog.csdn.net/qq_29350001/article/details/53339861

  • 32
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Linux常用命令gcc编译的步骤如下: 1. 打开终端,进入要编译的源代码所在的目录。 2. 输入命令gcc 源代码文件名.c -o 可执行文件名”,其中“源代码文件名.c”是要编译的源代码文件名,而“可执行文件名”是编译后生成的可执行文件名。 3. 如果编译过程中出现错误,可以通过查看错误信息来找到问题所在,并进行修正。 4. 编译成功后,可以通过输入“./可执行文件名”来运行生成的可执行文件。 需要注意的是,Linux常用命令编译过程与其他程序的编译过程类似,需要掌握一定的编程基础知识和Linux操作技巧。 ### 回答2: Linux 是一种开源的操作系统,它的命令行界面非常强大,可以运行许多实用的命令。其中,gcc 是一种常用的编译器,可以将 C、C++ 等程序源代码编译成可执行文件。 下面,我将介绍一些常用的 Linux 命令,以及如何使用 gcc 编译程序。 1. ls 命令:ls 命令可以列出当前目录下的所有文件和文件夹。例如,输入 ls 命令后,会列出当前目录下的所有文件和文件夹的名称。 2. cd 命令:cd 命令可以切换到指定的目录。例如,输入 cd /home/user 目录后,会切换到用户的 home 目录。 3. mv 命令:mv 命令可以将文件或文件夹移动到其他位置。例如,输入 mv file1.txt /home/user 目录后,会将 file1.txt 移动到用户的 home 目录。 4. cp 命令:cp 命令可以复制文件或文件夹到指定的位置。例如,输入 cp file1.txt /home/user 目录后,会将 file1.txt 复制到用户的 home 目录。 5. rm 命令:rm 命令可以删除文件或文件夹。例如,输入 rm file1.txt 命令后,会将文件 file1.txt 删除。 6. mkdir 命令:mkdir 命令可以创建新的文件夹。例如,输入 mkdir myfolder 命令后,会在当前目录下创建一个名为 myfolder 的文件夹。 7. touch 命令:touch 命令可以创建新的文件。例如,输入 touch myfile.txt 命令后,会在当前目录下创建一个名为 myfile.txt 的文件。 经常需要运行一些编译后的程序,而 gcc 是一个能够编译多个语言的编译器。编译C程序的命令gcc -o outputfile inputfile.c。其中 outputfile 为输出文件名,inputfile.c 为输入文件名。例如,输入 gcc -o myprogram myprogram.c 命令后,会编译 myprogram.c 文件,并将编译结果输出到名为 myprogram 的可执行文件中。运行 myprogram 文件即可运行编译出来的程序。 以上是一些常用的 Linux 命令gcc 编译的简单实现。熟练运用这些命令可以使 Linux 的使用更加得心应手。 ### 回答3: Linux系统是一款非常受欢迎的操作系统,它的命令行界面十分强大,可以通过各种命令来进行操作和管理。而gcc是一个被广泛应用的编译器,可以将程序源代码编译为可执行的二进制文件,是开发Linux程序不可或缺的工具。 一、常用命令 1. cd:切换目录,可以通过cd命令进入到需要操作的目录下,例如cd /home/user表示进入到/home/user目录下。 2. ls:列出文件和文件夹,可以通过ls命令查看当前目录下的文件和文件夹,例如ls -l表示以列表形式展示文件及其属性。 3. mkdir:创建目录,可以通过mkdir命令来创建一个新的目录,例如mkdir test表示创建一个名为test的目录。 4. touch:创建文件,可以通过touch命令来创建一个新的文件,例如touch file.txt表示创建一个名为file.txt的文件。 5. rm:删除文件或目录,可以通过rm命令来删除一个文件或目录,例如rm file.txt表示删除名为file.txt的文件,rm -r test表示删除名为test的目录及其子目录。 二、用gcc编译 1. 编写程序源代码,例如hello.c。 2. 使用gcc编译程序,例如gcc hello.c -o hello。其中,-o参数表示输出文件名,默认输出文件为a.out。 3. 运行程序,例如./hello。 在开发Linux程序时,可以使用一些常见的gcc选项和参数来进行编译。例如: 1. -Wall选项用于显示所有警告信息。 2. -g选项用于生成调试信息。 3. -I选项用于指定头文件搜索路径。 4. -L选项用于指定库文件搜索路径。 5. -l选项用于指定使用的库文件。 以上是Linux常用命令gcc编译的简单介绍,对于需要开发Linux程序的开发者来说,熟练掌握这些命令和选项是非常重要的。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值