Linux内核如何才能使用GCC进行编译?对于某些项目来说,哪些GNU C扩展真的是必要的,为什么?有哪些GNU C扩展可用,这些扩展在C99中实现并不重要?
6
A
回答
8
本文解释使用的扩展:GCC hacks in the Linux kernel。其中一些是微不足道的,有些不是(主要是优化技巧)。
1
GCC支持Nested Functions,它不是C99标准的一部分。也就是说,需要进行一些分析,以了解它们在Linux内核中的实际流行程度。
0
我想这不是他们真的那必要的。只是有很多有用的东西,交叉编译器的可移植性对Linux内核来说并不是什么大问题。更不用说为了摆脱依赖扩展而需要的大量工作。
2
Linux内核被编写成由GCC编译,因此标准兼容对于内核开发人员来说从来不是一个目标。
如果GCC提供了一些有用的扩展,使得编码更容易或编译内核更小或更快,那么使用这些扩展是自然的选择。
7
这里有一对夫妇的gcc扩展了Linux内核使用:
- 联汇编
- GCC内建命令,如__builtin_expect,__ builtin_constant,__ builtin_return_address
- 功能属性来指定例如(例如__attribute __((regparm(0)),__ attribute __((packed,aligned(PAGE_SIZE))))))
- 取决于gcc预定义宏的特定代码(例如某些版本中某些gcc错误的解决方法)
- 范围在开关的情况下(情况8 ... 15 :)
这里有几个:http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/
大部分这些GCC细节都非常依赖于体系结构,或者是因为GCC是如何成为可能实施,并且可能没有意义由C标准指定。其他的只是C的扩展。由于Linux内核的构建依赖于这些扩展,所以其他编译器必须提供与gcc相同的扩展才能构建内核。
并非Linux 有依赖于gcc的这些功能,例如, NetBSD内核很少依赖gcc特定的东西。
相关问题
- 1. NetworkX有哪些可扩展性问题?
- 2. GNU C扩展文档:它在哪里?
- 3. 在C++中实现可扩展代码
- 4. 我在哪里可以找到这些扩展的MIME类型?
- 5. Angular 4扩展并实现
- 6. 扩展范围中有哪些变量可用(如窗口,gBrowser)?
- 7. ANSI C有哪些最常用的扩展(或使用)?
- 8. 警告:GNU扩展
- 9. 这只会允许某些扩展吗?
- 10. 哪些PaaS最适合需要扩展的Meteor JS应用?
- 11. 实现CSS可折叠不扩展
- 12. Python:os.listdir替代/某些扩展
- 13. 如何禁用GNU C扩展?
- 14. PDO扩展需要这个适配器,但扩展不加载
- 15. 哪个PHP扩展实现了shm_attach?
- 16. 编写firefox或chrome扩展需要哪些技能? (如Adblock)
- 17. 选择铬扩展中的元素有哪些方法?
- 18. 扩展类并实现接口
- 19. 扩展CachedDataAnnotationsModelMetadataProvider不缓存一些DataAnnotations
- 20. GNU as .macro指令扩展
- 21. SAPUI5 - 扩展sap.ui.controller实现
- 22. 实现泛型扩展
- 23. 如何GNU C扩展__attribute __(__ cleanup__)工作?
- 24. 扩展类并实现接口
- 25. 类扩展了另一个类,并在java中实现接口可以被转换为anyd这些类型?
- 26. div不扩展表扩展,或div不扩展当它扩大
- 27. 要启用扩展,验证它们在这些.ini文件中启用 - Ubuntu的
- 28. 在Firefox扩展中使用jQuery扩展
- 29. TYPO3 Extbase扩展现有的扩展使用自己的扩展模型?
- 30. 扩展和实现接口
如果你捅了你,你可以找到一个问题,链接到已成功构建Linux的其他编译器。至少对于某些内核版本,'tcc'可以做到这一点。 – dmckee 2010-04-20 20:54:25
标题和问题不一致。 – 2010-04-20 20:58:56
dmckee:Linux内核需要修补一下才能使用tcc编译。 – Yktula 2010-04-20 21:18:23