【发布时间】:2021-02-27 18:01:00
【问题描述】:
哪些编译器标志用于构建标准 c/c++ 库,例如 glibc 和 libstdc++?
它们在 debian、fedora、archlinux 等发行版中是否相同?
在 debian 机器上有 dpkg-buildflags,但我不确定它们是否被关键运行时库覆盖。
【问题讨论】:
哪些编译器标志用于构建标准 c/c++ 库,例如 glibc 和 libstdc++?
它们在 debian、fedora、archlinux 等发行版中是否相同?
在 debian 机器上有 dpkg-buildflags,但我不确定它们是否被关键运行时库覆盖。
【问题讨论】:
一个常见的因素是-O2,其中-O2 -g(启用gdb 调试符号)是最常见的。 -O2 绝对是维护者所期望的优化级别,假设包应该被编译。
如果您查看 Debian 源代码包(或 -debian.tar.* 压缩包)中的 debian/rules,您通常会发现 HOST_CFLAGS 和 HOST_CXXFLAGS 描述了在源代码包为使用 Debian 工具构建。
这在例如man 1 dpkg-buildflags 手册页中有记录:“供应商设置的默认值包括 -g 和默认优化级别(通常为 -O2,如果 DEB_BUILD_OPTIONS 环境变量定义 noopt,则为 -O0 )。”
在 Debian 之外,Gentoo recommends -O2 -pipe 和 -march= 用于当前架构。 (-pipe 选项告诉 GCC 在构建期间使用管道而不是临时文件,这通常更快,但在构建期间使用更多 RAM。它对编译的二进制文件没有影响。)
像OpenWRT 这样的嵌入式系统经常使用-Os 来生成更小的二进制文件。
【讨论】: