o0:这个级别(即字母“O”后跟一个零)完全关闭优化,是默认如果没有指定- O级CFLAGS或CXXFLAGS。这样可以减少编译时间和可以提高调试信息,但有些没有启用优化应用程序无法正常工作。这个选项不推荐除了调试。
o1群:最基本的优化级别。编译器会尝试生产更快,更小的代码没有太多编译时间。这是基本的,但它应该完成工作。
- 02:一步o1群。推荐的优化级别,除非系统有特殊需要。- 02将激活更多的旗帜除了o1群激活的。- 02,编译器将尝试提高代码性能不影响大小,和没有太多的编译时间。
o3:最高水平的优化成为可能。它使优化是昂贵的编译时间和内存使用量。编译与o3不是保证的方式来提高性能,事实上,在许多情况下,可以减缓系统由于更大的二进制文件和内存使用增加。o3也是打破几个包。不推荐使用o3。
操作系统:优化代码大小。激活所有- 02选项不增加生成的代码的大小。它可以用于机器有非常有限的磁盘存储空间和/或cpu小缓存大小。

og:在GCC 4.8中,一个新的一般优化级别,噩,引入了。它地址需要快速编译和优越的调试经验,同时提供一个合理的水平的运行时性能。整体发展经验应该比默认o0优化水平。注意,噩并不意味着- g,它只是禁用优化可能会干扰调试。

链接做了什么:把程序中所有的目标文件和所需文件的库文件连接在一起,最终生成一个可以直接运行的文件,称为执行文件。

静态编译static:

 我们知道gcc的-static选项可以使链接器执行静态链接。但简单地使用-static显得有些’暴力’,因为他会把命令行中-static后面的所有-l指明的库都静态链接,更主要的是,有些库可能并没有提供静态库(.a),而只提供了动态库(.so)。这样的话,使用-static就会造成链接错误。
  
之前的链接选项大致是这样的,

1 CORE_LIBS="$CORE_LIBS -L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib64 -lssl -lcrypto"

修改过是这样的,

1 2 CORE_LIBS="$CORE_LIBS -L/usr/lib64/mysql -Wl,-Bstatic -lmysqlclient -Wl,-Bdynamic -lz -lcrypt -lnsl -lm -L/usr/lib64 -lssl -lcrypto"

  其中用到的两个选项:-Wl,-Bstatic和-Wl,-Bdynamic。这两个选项是gcc的特殊选项,它会将选项的参数传递给链接器,作为链接器的选项。比如-Wl,-Bstatic告诉链接器使用-Bstatic选项,该选项是告诉链接器,对接下来的-l选项使用静态链接;-Wl,-Bdynamic就是告诉链接器对接下来的-l选项使用动态链接。下面是man gcc对-Wl,option的描述,

-Wl,option Pass option as an option to the linker. If option contains commas, it is split into multiple options at the commas. You can use this syntax to pass an argument to the option. For example, -Wl,-Map,output.map passes -Map output.map to the linker. When using the GNU linker, you can also get the same effect with -Wl,-Map=output.map.

下面是man ld分别对-Bstatic和-Bdynamic的描述,

-Bdynamic -dy -call_shared Link against dynamic libraries. You may use this option multiple times on the command line: it affects library searching for -l options which follow it. -Bstatic -dn -non_shared -static Do not link against shared libraries. You may use this option multiple times on the command line: it affects library searching for -l options which follow it. This option also implies --unresolved-symbols=report-all. This option can be used with -shared. Doing so means that a shared library is being created but that all of the library's external references must be resolved by pulling in entries from static libraries.

  值得注意的是对-static的描述:-static和-shared可以同时存在,这样会创建共享库,但该共享库引用的其他库会静态地链接到该共享库中。

O1,O2,O3优化了什么,链接做了什么;静态链接-static相关推荐

  1. C++手动开启O2优化(以及-O -O1 -O2 -O3优化的知识点)(竞赛可用)

    O1优化会消耗少多的编译时间,它主要对代码的分支,常量以及表达式等进行优化. O2会尝试更多的寄存器级的优化以及指令级的优化,它会在编译期间占用更多的内存和编译时间. O3在O2的基础上进行更多的优化 ...

  2. gcc 优化选项 -O1 -O2 -O3 -Os 优先级

    Gcc 编译优化简介 gcc 提供了为了满足用户不同程度的的优化需要,提供了近百种优化选项,用来对{编译时间,目标文件长度,执行效率}这个三维模型进行不同的取舍和平衡.优化的方法不一而足,总体上将有以 ...

  3. gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer(不积跬步无以至千里)

    -fomit-frame-pointer 在优化时候被启用,带来了效率的提升.看到一篇比较详细记录编译选项的文章,转发一下,同时给自己作一下备忘. 少优化->多优化: O0 -->> ...

  4. 【gcc】gcc优化等级 -O1 -O2 -O3 -Os -Ofast -Og

    目录 优化等级 -O1 -O2 -O3 -Os -Ofast -Og cmake 生成 debug和 release 版|Cmake设置优化等级 优化等级 -O1 -O2 -O3 -Os -Ofast ...

  5. c++ -O1,-O2,-O3资料整理

    原文:http://blog.csdn.net/xinianbuxiu/article/details/51844994 1.从.c文件到可执行文件,其间经历了几步? 高级语言是偏向人,按照人的思维方 ...

  6. #gcc笔记01#gcc编译选项 -O0 -O1 -O2 -O3

    -O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最(此处为大写字母O) 优化选项(来源:http://blog.csdn.net/Sodi ...

  7. gcc 中-O -O1 -O2 -O3 -Os -Ofast -Og优化的原理

    一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在指令之间设置断点,使用gdb中的 p命令查看变量的值,改变变量的值等.并且把获取最快的编译速度作为它的目标. ...

  8. java 静态链接_java如何调用静态链接库里面的函数?

    我现在有静态链接库文件:libtest.a里面有很多.o目标文件,其中一个目标文件在linux下使用nm命令查看其中包含的部分函数:kmer_counter.o:UA_memcpyU__cxa_ate ...

  9. makefile工作笔记0002---gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 相关博客http://blog.chinaunix.net/uid-24954950-id-295 ...

  10. gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化【转】

    转自:http://blog.csdn.net/qinrenzhi/article/details/78334677 相关博客http://blog.chinaunix.net/uid-2495495 ...

最新文章

  1. 2022-2028年中国微机电系统(MEMS)行业投资分析及前景预测报告
  2. 清华校友斩获ACM博士论文奖!相关研究为自动驾驶新算法奠定基础
  3. Java项目构建基础的三个统一,太厉害了!
  4. 37 | 案例篇:DNS 解析时快时慢,我该怎么办?
  5. 美摄云非编系统——网页端实时编辑渲染方案
  6. 物联网有哪些技术 物联网跟云计算人工智能有什么关系
  7. php中一级标题和二级标题,什么是一级标题,一二三标题格式举例
  8. java调试时监视_Java监控工具、调优、调试辅助函数
  9. mysql创建表语句 cmd_MySQL 创建数据表
  10. flash动画制作成品_Flash如何制作雪糕被吃掉的动画
  11. 数字电路基础知识——锁存器与触发器的建立时间和保存时间(一)
  12. 司机秘书:让司机省心的违章查询助手
  13. ps 毛发 边缘,抠图技巧,抠图后头发边缘的颜色怎处理
  14. 基于CIM的新型智慧城市发展政策解析
  15. 转:H5 页面36种漂亮的CSS3网页按钮Button样式
  16. 一、物流的基本概念|1.1物流的定义及作用
  17. CDA携手云网德国公司共同打造数据精英的国际化舞台
  18. Java / Tensorflow - API 调用 pb 模型使用 GPU 推理
  19. dellR730装机教程
  20. yum和repo详细解析

热门文章

  1. 英雄无敌3pc移植android版,今日手游:全盘移植《魔法门之英雄无敌3》
  2. 英语语法总结_02 名词词组与代名词
  3. The North American Invitational Programming Contest 2016 I-Tourists
  4. 致远OA单点登陆二次开发的实现(含源码)
  5. YOLO模型train.py文件报错:size mismatch for last_layer0.6.weight: copying a param with shape torch.
  6. BZOJ3039 玉蟾宫(单调栈)
  7. Python 数据可视化 下载数据
  8. 点击或长按复制打开微信H5落地页如何制作?
  9. 小白刷LeeCode(算法篇)7
  10. python del用法_python中del函数的用法详解