Linuxgcc编译器使用方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linuxgcc编译器使用方法
LINUX gcc编译器使用方法
本文介绍了在LINUX下进行C语言编程所需的基本知识。在本文中,我们将学习以下内容:
源代码编译
编译文件编译
库链接
程序调试
头文件和系统帮助
|源代码编译
是在Linux下进行的。如果你想编译一个c语言源程序,我们将使用GNU的gcc编译器。让我们举一个例子来说明如何使用gcc编译器。
假设我们有以下非常简单的源程序(你好。
INTMAIN(INTARGGC,CHAR * * ARGV){
PRINTF(Hello Linux);要编译这个程序,我们只需要在命令行执行。c
gcc编译器将为我们生成一个hello可执行文件。执行。/你好可以看到程序的输出。在命令行中,gcc表示我们使用gcc来编译我们的源程序。o选项表示我们需要编译器输出给我们的可执行文件叫做hello,hello.c是我们的源程序文件。
gcc编译器有许多选项。一般来说,我们只需要知道其中的一些。-o 选项我们已经知道,这意味着我们需要输出可执行文件的名称。-c 选项意味着我们只需要编译器输出目标代码。但是,没有必要输出可执行文件。
-g选项意味着我们需要编译器在以后编译时为我们提供调试程序的信息。如果
知道这三个选项,我们可以编译自己编写的简单源程序。如果您想了解更多选项,可以查看gcc帮助文档。有许多其他选项的详细描述。2。makefile
的编写假设我们有这样一个程序。源代码如下:
/* main . c */
# include mytol 1 . h # include mytol 2 . h intmain(intargc,char * * argv){
mytol 1 _ print(hello);mytool2_print(您好);}
/* my tool 1 . H */# if ndef _ MYTOL _ 1 _ H
# define _ MYTOL _ 1 _ H
void my tool 1 _ print(char * print _ str);# endif
/* my tool 1 . c */
# include my tool 1 . h void my tool 1 _ print(char * print _ str){
printf(这是mytool1 print,print _ str);}
/* my tool 2 . H */# if ndef _ MYTOL _ 2 _ H # define _ MYTOL _ 2 _ H
void my tool 2 _ print(char * print _ str);# endif
/* my tool 2 . c */
# include my tool 2 . h void my tool 2 _ print(char * print _ str){
printf(这是mytool2 print,print _ str);当然,因为这个程序很短,所以我们可以编译
gcc-c main . c
gcc-c my tool 1 . c
gcc-c my tool 2 . c
gcc-o main . o my tool 1 . o my tool 2 . o
。这样,我们也可以生成主程序,而且有时非常麻烦。但是如果我们考虑到如果有一天我们修改了一个文件(例如mytool1.c),那么我们必须重新输入上面的命令吗?也许你会说,这很容易解决。我可以写一个SHELL脚本,让她帮我完成。是的,它可以为这个程序工作。但是当我
想到更复杂的事情时,如果我们的程序有数百个源程序,我们需要编译器一个接一个地编译吗?
由于这个原因,聪明的程序员想出了一个很好的工具来做到这一点,那就是make。只要我们执行以下步骤,我们就能解决上述问题。在我们执行make之前,我们必须先写一个非常重要的文件。Makefile。对于上述程序,一个可能的Makefile文件是
#这是Makefile文件
main:main . OMI tool 1 . OMI tool 2 . o
gcc-o main . o my tool 1 . o my tool 2 . o
main . o:main . c my tool 1 . h my tool 2 . h
gcc-c main . c
my tool 1 . o她不想管理的其他文件。下面我们学习Makefile是如何编写的。Makefile中的
#起始行也是注释行。Makefile中最重要的事情是描述文件的依赖性。一般格式是:
目标:组件
选项卡规则
第一行表示依赖关系。第二行是规则。
例如,第二行
main:main . o my tool 1 . o my tool 2 . o
表示我们目标的组件是main . o
mytool 1 . o my tool 2 . o如果在目标被修改后从属对象被修改,我将执行规则行中指定的命令。正如我们在上面Makefile的第三行所说的,我将执行gcc-o main.o mytool 1.o mytool 2.o注意,规则行中的TAB表示有一个TAB键
Makefile有三个非常有用的变量。它们分别是$ @、$、和$,这意味着
$@目标文件,$所有相关文件,$第一个相关文件。
如果我们使用上述三个变量,那么我们可以将Makefile简化为
#这是简化的makefile
main:main . OMI tool 1 . OMI tool 2 . o o my tool 2 . o
gcc-o $ @ $。c.o:
gcc-c $
ok。我们的Makefile差不多。如果您想了解更多关于Makefile规则的信息,可以查看相应的文档。
3。链接到库
。尝试编译以下程序
/* temp . c */# inclu
de
int main(int argc,char * * argv){
double value;
printf(值:%f,值);程序
非常简单,但是当我们用gcc-otemp . c编译时,会出现下面的错误。/tmp/cc 33 kydu . o:INF function ` ` main acute;急性;:
/tmp/cc33Kydu.o(。text+0xe):未定义对`` logacute的引用。急性;collect 2:ldreturned 1退出状态
发生此错误是因为编译器找不到日志的特定实现。虽然我们包含了正确的头文件,但是,我们仍然需要在编译时连接某些库。在Linux