0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

gcc的使用方法以及Linux gcc 的常用选项

嵌入式星球 来源:嵌入式星球 作者:嵌入式星球 2020-10-22 14:42 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

gcc的使用方法

gcc 【选项】文件名

gcc常用选项

gcc

-v: 查看gcc编译器的版本,显示gcc执行时的详细过程

-o please the output into

指定文件名为file,这个名称不能和源文件名相同

-E preprocess only :do not compile ,assemble or link

只预处理 ,不会编译,汇编,链接

-S compile only:do not assemble or link

只编译,不会编译,汇编,链接

//==============================================================

gcc -v :查看gcc编译器的版本

方式一:

gcc hello.c 输出一个./a.out,然后./a.out来执行这个应用程序。gcc -ohello hello.c输出hello ,然后./hello 来执行这个程序。

方式二:

gcc -E -ohello.ihello.c

gcc -S -ohello.shello.i

gcc -c -ohello.ohello.s

gcc -ohellohello.o

.o:objet file (OBJ文件)

小结:1)输入文件的后缀名和选项共同决定gcc到底执行哪些操作;2)在编译过程中,除非是使用了-E,-S,-c选项(或者编译过程中出错阻止了编译过程否则最后的步骤都是链接)。

方式三:

gcc-c-ohello.ohello.c

gcc -o hello hello

gcc 会对.c文件默认进行预处理操作,-c再来指明编译,汇编,从而得到了.o文件

再来通过gcc -o hello hello.o 将.o文件进行链接,得到可执行应用程序

//======================================================

补充:

gcc -c -o hello.o hello.c

gcc -o hello hello.o

gcc会对.c文件默认进行预处理操作,-c再来指明编译,汇编从而得到.o文件。再通过gcc -o hello hello.o将.o文件进行链接,从而得到可执行文件。链接就是将汇编生成的OBJ文件,系统库的OBJ文件,库文件链接起来。最终生成可以在特定平台的可执行程序。

crtl.o ,crti.o ,crtbegin.o , crth.o是加入的系统标准启动文件,对于一般的应用程序,这些启动是必须的。

-lc :链接libc库文件, 其中libc库文件中就实现了printf等函数

gcc -v -nostdlib -ohello hello.o会提示因为没有链接系统标准启动文件和标准库文件,而链接失败。这个 -nostdlib选项常用于裸机的/boot loader,linux内核等程序,因为他们不需要启动文件,标准库文件。一般应用程序才需要系统标准启动文件和标准库文件 。裸机/boot loader,linux内核等不需要启动文件,标准库文件动态链接使用动态链接库进行链接,生成的程序执行的时候需要加载所需的动态库才能运行动态链接生成的程序体积较小,但是必须依赖所需要的动态库,否则无法执行静态链接使用静态库进行链接,生成的程序包含程序运行所需要的全部库,可以直接运行,不过静态链接生成的程序体积较大。

fqj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11812

    浏览量

    219527
  • 编译器
    +关注

    关注

    1

    文章

    1672

    浏览量

    51900
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32系列MCU在Eclipse GCC + JLink下的使用示例分享

    CW32系列MCU在Eclipse GCC + JLink下的使用示例: 1、下载安装Eclipse IDE for Embedded C/C++ Developers。 2、下载安装
    发表于 02-02 06:57

    GCC -O0 编译内核:调试党的 “救命神器”,这些优势 90% 开发者没吃透!

    在 Linux 内核开发、驱动调试或内核问题定位的场景中,“编译优化等级” 是个容易被忽略却影响巨大的选择。GCC 的优化等级从 O0 到 O3、Os、Ofast 各有侧重,而 O0(默认优化等级
    的头像 发表于 12-03 07:05 979次阅读
    <b class='flag-5'>GCC</b> -O0 编译内核:调试党的 “救命神器”,这些优势 90% 开发者没吃透!

    GCC开发工程的模版

    的cw32f030.h以及system_cwl083.h。 5、Libraries/CMSIS/Device/startup_cw32f030_gcc.s重命名为startup_cw32l083_gcc.s。 6
    发表于 11-28 08:15

    如何利用 gcc 编译Ccode?

    最近在玩e203_hbirdv2,利用默认的case 可以仿真。现在想自己写C code 进行仿真,请问该如何利用 gcc 编译?有没有 详细的教程。
    发表于 11-05 12:37

    gcc工具链无法汇编硬件浮点指令fsqrt问题

    团队在项目推进过程中发现,Linux环境下,math库中的sqrt()函数无论是在浮点数的gcc工具链中还是整数的gcc工具链中,综合的结果都是以整数指令来模拟。 若果想要进一步地节约时间,我们
    发表于 10-20 06:19

    飞凌嵌入式ElfBoard-Vim编辑器之GCC的基本使用

    /example/hello$ gcc hello.c1.GCC编译过程GCC编译器的编译过程要经过预处理,编译,汇编,链接等4步才能够生成可执行文件。预处理:主要实现将头文件展开,宏定义替换
    发表于 10-16 09:05

    飞凌嵌入式ElfBoard-Vim编辑器之GCC编译器的安装

    GCC,但软件包可能不全,为了确保有一个基本完善的本地编译环境,可安装build-essential软件包。在确保Linux能联网的情况下,在终端输入如下安装命令: elf@ubuntu:~$ sudo
    发表于 10-15 08:44

    GCC编译器,怎么才能实现c文件中未被调用的函数,不会被编译呢?

    GCC编译器,怎么才能实现c文件中未被调用的函数,不会被编译?有什么编译选项可以设置吗? 移植代码,有些函数没被调用的函数想留在代码里,但不想被编译,编译的话报错报警告啥的太多了,而且编译起来也慢。 谢谢!
    发表于 09-28 12:25

    RT1052的gcc后的bin执行异常怎么解决?

    项目原来一直都是keil在编译的,但是现在有自动化测试的需求,需要gcc编译bin文件,但是我搞了1个月了gcc出来的bin总是莫名其妙跑飞,什么lds,startup文件我都重写好几遍了,有没有
    发表于 09-28 10:53

    cubemx+clion+gcc无法使用msh怎么解决?

    通过STM32CUMX配置RTTHREAD NANO ,用keil编译并且移植shell之后,输入键盘上下键无反应,而用clion+gcc编译后(修改过启动文件),只能打印version信息,无法显示msh和输入,两者除了启动文件以外,其余的配置基本相同,请问为啥gcc
    发表于 09-23 07:36

    为什么将 GCC 项目导入 NuEclipse 失败?

    为什么将 GCC 项目导入 NuEclipse 失败?
    发表于 09-01 08:05

    如何将GCC项目导入NuEclipse?

    如何将GCC项目导入NuEclipse?
    发表于 09-01 07:04

    CW32L010 MCU在VSCode+GCC+EIDE+JLink下的使用示例

    CW32L010 MCU 在VSCode+GCC+ EIDE + JLink 下的使用示例: 1、点击VSCode左边栏中的Extensions,在EXTENSIONS:MARKETPLACE搜索
    的头像 发表于 07-01 14:52 1235次阅读
    CW32L010 MCU在VSCode+<b class='flag-5'>GCC</b>+EIDE+JLink下的使用示例

    cubemx+clion+gcc无法使用msh怎么解决?

    通过STM32CUMX配置RTTHREAD NANO ,用keil编译并且移植shell之后,输入键盘上下键无反应,而用clion+gcc编译后(修改过启动文件),只能打印version信息,无法显示msh和输入,两者除了启动文件以外,其余的配置基本相同,请问为啥gcc
    发表于 06-13 08:17

    使用gcc编译成功后,如何烧录?

    使用gcc编译成功后,如何烧录。 scons 命令吗?
    发表于 04-30 07:13