GCC编译器常用选项

  • 生成动态链接库: gcc file.c -fPIC -o file.so, PIC表示Position-Independent Code: 独立地址代码
  • 编译: gcc -c file.c, c表示: compile(编译)
  • 只预处理: gcc -E file.c
  • 生成汇编代码: gcc -S file.c
  • 生成可执行文件: gcc file.c -o app
  • 生成调试信息: gcc -g file.c, 之后可以使用gdb进行调试, g表示generate(生成), 但是只有在发布app时, 使用strip app去掉调试信息
  • 显示所有警告: gcc -Wall file.c, Wall表示: Warn all
  • Werror: 将所有的警告视为错误
  • w: 禁止显示警告
  • 显示编译的详细信息: gcc -v file.c
  • 指定库所在的目录: gcc -L/paht/to/youlibdir/ file.c, 注意: -L后边紧跟的就是含有执行lib文件的目录, 没有空格
  • 指定库: gcc -l/path/to/youlib file.c, 注意: 小写的l跟L用法一样, 只是后边跟的是文件的路径
  • 指定头文件的目录: 使用-I
  • 指定头文件: 使用-l, 小写的L, 与上面的l不同, 该l后面要有空格
  • 其中的-I, -L, -l在命令中可以出现多次, 那-I为例, gcc -I/usr/include/ -I/usr/local/include -I./someheadersdir file.c
  • 指定需要编译的文件的语言: gcc -x C file.c
  • -mcmodel=small | large, 表示编译采用的memory code模型, small则会比较快, 但是不安全; large则反之; 一般文件比较大就是用large, 默认采用的是small
  • C语言是有内建函数的, 比如printf函数, 因为太常用了, 所以就将其整合为了一个内建函数, 在不导入头文件的情况下也可以是使用, 但是如果我们想要自己实现一个printf, 名字也一样, 这样不就名称冲突了么, gcc提供了一个选项-fno-builtin, gcc在编译的时候会忽略所有的内建函数, 如果要忽略特定的则是-fno-builtin-functionname
  • 通过-m32或者-m64编译对应平台的二进制程序
  • gcc的代码优化:
gcc -O1 file.c
gcc -O2 file.c
gcc -O3 file.c -O后面跟的数字表示优化的程度, 3表示最高的优化, 但是编译的时间变长了
如果跟0表示不做任何优化

GCC和AR(Archive)配合生成静态链接库

  1. 使用gcc编译生成.o文件
  2. 使用ar生成静态链接库
gcc -c file.c --> create file.o
ar rcv my.a file.o
  1. 关于ar的选项
c: Create, 生成归档(.a)
r: Replace, 如果归档中已经有了一个同名的.o文件, 替换掉
v: verbose, 显示ar创建链接库的信息

GCC操作的更多相关文章

  1. 操作系统内核Hack:(一)实验环境搭建

    操作系统内核Hack:(一)实验环境搭建 三四年前,心血来潮,入手<Orange's:一个操作系统的实现>学习操作系统内核,还配套买了王爽的<汇编语言(第二版)>和<80 ...

  2. linux缺失gcc的安装方法

    linux安装gcc操作 1.查看linux是否有gcc文件 这个是没有挂载的 2. 使用df,查看系统光盘的挂载位置 3.卸载分区 umount /dev/sr0 4.将redhat系统光盘重新载入 ...

  3. 对云风 cstring 第二次解析

    前言 从明天起 关心粮食和蔬菜 我有一所房子 面朝大海 春暖花开 本文前提条件 1.了解 posix 线程 2.了解 原子操作 3.具备简单C基础,或者 你也敲一遍. 如果上面不太清楚,你可以翻看我以 ...

  4. 再探Linux动态链接 -- 关于动态库的基础知识

      在近一段时间里,由于多次参与相关专业软件Linux运行环境建设,深感有必要将这些知识理一理,供往后参考. 编译时和运行时 纵观程序编译整个过程,细分可分为编译(Compiling,指的是语言到平台 ...

  5. 第一周嵌入式程序设计(linux环境下)的学习总结

    2014025641 <嵌入式程序设计>第1周学习总结 本周学习内容 首先我们先复习下之前学习过的内容,什么是linux? Linux 就是一个操作系统,就像你多少已经了解的 Window ...

  6. 再探Linux动态链接 -- 关于动态库的基础知识(Dynamic Linking on Linux Revisited)

      在近一段时间里,由于多次参与相关专业软件Linux运行环境建设,深感有必要将这些知识理一理,供往后参考. 编译时和运行时 纵观程序编译整个过程,细分可分为编译(Compiling,指的是语言到平台 ...

  7. CentOS7服务器查看相关配置命令

    CPU个数:(base) [jiangshan@localhost ~]$ grep 'physical id' /proc/cpuinfo | sort -u | wc -l2CPU核数:(base ...

  8. 专家解读Linux操作系统内核中的GCC特性

    专家解读Linux操作系统内核中的GCC特性   Linux内核使用GNU Compiler Collection (GCC)套件的几个特殊功能.这些功能包括提供快捷方式和简化以及向编译器提供优化提示 ...

  9. 测试一下robotgo自动化操作,顺便解决了原来的mingw版本中只有gcc,没有g++的问题

    参考:https://gitee.com/veni0/robotgo#examples  但是编译不成功 找到这个:https://gitee.com/veni0/robotgo#examples ( ...

随机推荐

  1. org.apache.commons.lang3包中的isEmpty和isBlank

    主要为了区分一下empty和blank的用法,先看源码: isEmpty public static boolean isEmpty(CharSequence cs) { return cs == n ...

  2. JavaScript 测试和捕捉(try与catch)

    JavaScript 测试和捕捉 try 语句允许我们定义在执行时进行错误测试的代码块. catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块. JavaScript 语句 try ...

  3. GoogLeNet InceptionV2/V3/V4

    仅用作自己学习 这篇文章中我们会详细讲到Inception V2/V3/V4的发展历程以及它们的网络结构和亮点. GoogLeNet Inception V2        GoogLeNet Inc ...

  4. new types may not be defined in a return type(c++语言编译错误,处理)

    在写程序的时候,定义类时要在大括号后面加上: class Point{ public: Point(int a,int b); Point(const Point &p); int getx( ...

  5. completer自动完成

    由于项目需要,在输入框中要做一些输入限制的同时,更加要求用户体验,提供一些自动完成设置.所以有需求,总会有解决方式,下面说一下自动完成插件的原理: html的body部分: <span styl ...

  6. 洛谷P2900 [USACO08MAR]土地征用Land Acquisition(斜率优化)

    题意 约翰准备扩大他的农场,眼前他正在考虑购买N块长方形的土地.如果约翰单买一块土 地,价格就是土地的面积.但他可以选择并购一组土地,并购的价格为这些土地中最大的长 乘以最大的宽.比如约翰并购一块3 ...

  7. django 基础框架学习 (三)

    Django框架基础-03数据库新增数据    1.save⽅法        >>> from datetime import date        >>> f ...

  8. SP8222 NSUBSTR - Substrings

    \(\color{#0066ff}{ 题目描述 }\) 你得到一个字符串,最多由25万个小写拉丁字母组成.我们将 F(x)定义为某些长度X的字符串在s中出现的最大次数,例如字符串'ababaf'- F ...

  9. P4196 [CQOI2006]凸多边形 半平面交

    \(\color{#0066ff}{题目描述}\) 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n=2时,两个凸多边形如下图: 则相交部分的面积为5.233. \(\color{#0066f ...

  10. ArrayList深度分析:ArrayList和数组间的相互转换

    一.ArrayList转换为数组ArrayList提供public <T> T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组,返回数组的运行时类型就 ...