首页 > 编程知识 正文

gcc编译多个c文件,linux编译命令

时间:2023-05-05 10:45:46 阅读:21307 作者:2984

在Linux上进行c语言编程,必然需要利用GNU GCC编译c源代码生成可执行程序。 Gcc命令的常见格式如下:

Gcc [选项]要编译的文件[选项] [目标文件]。 这里,目标文件是默认文件,Gcc默认生成的可执行文件名称是编译文件. out

经典入门计划' Hello World!'

# vi hello.c,编辑如下。

#包含

#包含

语音主(语音) )。

{

打印(hello world! /r/n ';

}

用gcc编译成可执行文件。 #gcc hello.c,该命令直接将hello.c生成最终二进制可执行程序a.out。 可以在./a.out上运行。 注意:需要main主函数。

该指令隐含地执行(1)预处理、)汇编、(3)编译、(4)链路,形成最终的二进制可执行程序。 现在,我们将使用GCC命令选项逐一分析GCC进程。

1 )预处理(预处理)。 在此阶段,编译器将编译包含在c源代码中的头文件,例如stdio.h,用户可以使用gcc选项“-E”进行浏览。 用法: #gcc -E hello.c -o hello.i,作用:将hello.c预处理输出到hello.i文件(-o选项是特定目标,如gcc-o客户端. exe客户端. c ) 可以在vi hello.i上看到预处理过程信息。

2 )编译阶段(编译)。 在这个阶段,Gcc首先检查代码的正确性、有无语法错误等,确定代码的实际工作,检查无误后,Gcc将代码翻译成汇编语言。 用户可以使用“-S”选项查看并生成程序集代码。

用法: [ root ] # gccshello.Io hello.s

3 )装配阶段(装配)。 汇编阶段将编译阶段生成的“. s”文件转换为二进制目标代码。 用法: [ root ] # gccchello.so hello.o

4 )链接阶段(链接)。 用法: [ root ] # gcc hello.oo hello.exe,作用:将编译输出文件hello.o链接到最终可执行文件hello.exe。

该程序中没有定义“printf”的函数实现,并且预编译中包含的“stdio.h”也只是该函数的声明,没有定义函数的实现。 那么,“printf”函数在哪里实现? 最后一个答案是,系统将所有这些函数的实现都放在名为libc.so.6的库文件中。 可以使用ldd命令检查动态库的加载情况。 [root]# ldd hello.exe。

包装器一般分为静态库和动态库两种。 静态库是指在编译链接时,将库文件的所有代码添加到可执行文件中。 因此,生成的文件会很大,但运行时不需要库文件。 扩展名通常为“. a”。 与动态库相反,通过在程序运行时从运行时链接文件加载库,而不是在编译链接时将库文件的代码添加到可执行文件中,可以节省系统开销。 动态库的扩展名为“. so”,如上所述,libc.so.6为动态库。 gcc在编译时默认使用动态库。

(占卜师1982 ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。