首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

宋宝华: 关于Linux编译优化几个必须掌握的姿势

01 编译选项和内核编译 首先我们都知道,Linux内核如果用O0编译,是无法编译过的,Linux的内核编译,要么是O2,要么是Os,这点从Linux的Makefile里面可以看出: ?...从O0到O1,O2,O3,是一个开启的优化选项逐步加大的过程: ? kernel用O0编译不过,是因为kernel本身也没有想用O0能够编译过,它的设计里面包含了编译会优化的假想。...O0编译会报如下错,说f()函数没有定义: $ gcc -O0 cc.c cc.c:1:13: warning: ‘f’ used but never defined [enabled by default...总结的话 下面给几条实践指南: 尽量不要尝试用O0去编译内核,这不符合真实的工程实践,也不太被主流Linux社区所支持;内核依赖O2/Os去做较多的优化; 追求你的代码在O2的情况下,仍然是正确的,代码要经得起编译优化...;比如O0工作正常,而O2不正常,应该尽可能从自身找原因,分析汇编; 如果在全局优化的情况下,想针对某个局部避免优化,可以尝试用noinline,__attribute__((optimize("O0"

2.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

Ubuntu20.04linux内核(5.4.0版本)编译准备与实现过程-编译过程(2)

image.png Ubuntu20.04linux内核(5.4.0版本)编译准备与实现过程-编译前准备(1)    切记:注意一点需要参照前一篇随笔,不然编译过程十有八九出问题。...直接修改内核的Makefile文件,我的环境中为/home/frank/Desktop/linux-5.4/Makefile,将其中的-O2优化级别全部替换成-O1(总共有三处)。...既然去优化,为什么不直接改成-O0呢?答案很简单,改成-O0或者-Og,后面编译过不了。能降低一点优化级别,也是好的。   ...虽然顶层Makefile文件中不能将优化级别变成-O0,但是有可能把某个模块的优化级别降成-O0。比如,当我们需要调试研究某一个模块时,可以在该模块自己的Makefile文件中加入-O0。...为了便于大家进行内核编译,下面总结性地列出了主要步骤: 第一步:将下载的内核源码5.4.0,解压于目录~/Desktop/linux-5.4中。

2K20

cmake快速入门「建议收藏」

三、安装cmake 几乎所有主流的Linux发行版的源中都包含有cmake的安装包,直接从源中添加即可。当然,也可以在官方网站下载源代码自行编译安装。...注:为了能够测试本文中的实例程序,如果读者的Linux系统中所带的cmake版本低于2.6,请从官网下载2.6版本或以上的源代码进行编译并安装。...这时执行命令 find * | xargs grep “O0” 后结果如下: 清单 8 find * | xargs grep “O0″的执行结果 CMakeFiles/main.dir/flags.make...:CXX_FLAGS = -O0 -Wall -g -ggdb CMakeFiles/main.dir/link.txt:/usr/bin/c++ -O0 -Wall -g -ggdb CMakeFiles...执行命令 find * | xargs grep “O0” 后结果如下: CMakeLists.txt:SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall

1.1K60
领券