GCC操作
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)配合生成静态链接库
- 使用gcc编译生成.o文件
- 使用ar生成静态链接库
gcc -c file.c --> create file.o
ar rcv my.a file.o
- 关于ar的选项
c: Create, 生成归档(.a)
r: Replace, 如果归档中已经有了一个同名的.o文件, 替换掉
v: verbose, 显示ar创建链接库的信息
GCC操作的更多相关文章
- 操作系统内核Hack:(一)实验环境搭建
操作系统内核Hack:(一)实验环境搭建 三四年前,心血来潮,入手<Orange's:一个操作系统的实现>学习操作系统内核,还配套买了王爽的<汇编语言(第二版)>和<80 ...
- linux缺失gcc的安装方法
linux安装gcc操作 1.查看linux是否有gcc文件 这个是没有挂载的 2. 使用df,查看系统光盘的挂载位置 3.卸载分区 umount /dev/sr0 4.将redhat系统光盘重新载入 ...
- 对云风 cstring 第二次解析
前言 从明天起 关心粮食和蔬菜 我有一所房子 面朝大海 春暖花开 本文前提条件 1.了解 posix 线程 2.了解 原子操作 3.具备简单C基础,或者 你也敲一遍. 如果上面不太清楚,你可以翻看我以 ...
- 再探Linux动态链接 -- 关于动态库的基础知识
在近一段时间里,由于多次参与相关专业软件Linux运行环境建设,深感有必要将这些知识理一理,供往后参考. 编译时和运行时 纵观程序编译整个过程,细分可分为编译(Compiling,指的是语言到平台 ...
- 第一周嵌入式程序设计(linux环境下)的学习总结
2014025641 <嵌入式程序设计>第1周学习总结 本周学习内容 首先我们先复习下之前学习过的内容,什么是linux? Linux 就是一个操作系统,就像你多少已经了解的 Window ...
- 再探Linux动态链接 -- 关于动态库的基础知识(Dynamic Linking on Linux Revisited)
在近一段时间里,由于多次参与相关专业软件Linux运行环境建设,深感有必要将这些知识理一理,供往后参考. 编译时和运行时 纵观程序编译整个过程,细分可分为编译(Compiling,指的是语言到平台 ...
- CentOS7服务器查看相关配置命令
CPU个数:(base) [jiangshan@localhost ~]$ grep 'physical id' /proc/cpuinfo | sort -u | wc -l2CPU核数:(base ...
- 专家解读Linux操作系统内核中的GCC特性
专家解读Linux操作系统内核中的GCC特性 Linux内核使用GNU Compiler Collection (GCC)套件的几个特殊功能.这些功能包括提供快捷方式和简化以及向编译器提供优化提示 ...
- 测试一下robotgo自动化操作,顺便解决了原来的mingw版本中只有gcc,没有g++的问题
参考:https://gitee.com/veni0/robotgo#examples 但是编译不成功 找到这个:https://gitee.com/veni0/robotgo#examples ( ...
随机推荐
- C#去边框以及无边框窗体移动
1.去边框 : 1) 选中要去除边框的窗体,按F4调出窗体属性. 2)在属性框中找到FormBorderStyle选择none. 2.去掉边框后实现对窗口程序的拖动 1)双击窗体,进入程序设计界面 ...
- winform GDI基础(一)
1获取画布 (1)从PaintEventArgs类中获取画布 private void Form1_Paint(object sender, PaintEventArgs e) { Graphics ...
- JS图片转Base64
网络上有很多片介绍通过js将图片转换成base64的文章,之所以再写这篇文章的原因时发现没有找到系统的介绍的文章,有的介绍如何实现本地项目的图片转码,有的介绍如何实现网络资源的图片转化,但是系统介绍的 ...
- winform按钮文字换行
用button的Bounds属性 btn.Bounds = new Rectangle(new Point(5 + i * 143, 25), new Size(100, 60));
- leftjoin及多个leftjoin执行顺序
给个通俗的解释吧.例表aaid adate1 a12 a23 a3表bbid bdate1 b12 b24 b4两个表a,b相连接,要取出id相同的字段select * from a inner jo ...
- [翻译]CURAND Libaray--Host API--(2)
Translated by xingoo 如果有错误请联系:xinghl90@gmail.com 2.3 返回值 所有的CURAND host端的函数返回值都是curandStatus_t.如果调用没 ...
- Hadoop源码分析之产生InputSplit文件过程
用户提交 MapReduce 作业后,JobClient 会调用 InputFormat 的 getSplit方法 生成 InputSplit 的信息. 一个 MapReduce 任务 ...
- socket 连接关闭的TIME_WAIT状态的理由
MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失 TIME_WAIT两点原因: 1.TCP分节可能 ...
- PXE刷机,存储节点失败
最近刚刚帮客户对一台满配的X6-2刷机初始化,尝试了下PXE方式,但刷完机后,发现计算节点的imagehistory输出的状态都是成功的,而所有的存储节点状态都为failure,具体如下: [root ...
- lambda函数/排序/filter/map
1.lambda 匿名函数 zrf = lambda x:x**2 ret = zrf(10) #这里面实际上还是有函数名 print(ret) 2.sorted 排序(list也自带排序功能) 排序 ...