在 linux 台机器上构建运行时的编译标志

Compilation flags to build runtime on linux machines

哪些编译器标志用于构建标准 c/c++ 库,如 glibclibstdc++? 它们在 debian、fedora、archlinux 等发行版中是否相同?

在 debian 机器上有 dpkg-buildflags 但我不确定它们是否被关键运行时库覆盖。

一个公因数是 -O2,最常见的是 -O2 -g(启用 gdb 调试符号)。 -O2 绝对是预期的优化级别维护者假设应该编译包。

如果您查看 Debian 源代码包中的 debian/rules(或 -debian.tar.* tarball),您通常会发现 HOST_CFLAGSHOST_CXXFLAGS 描述了 C和使用 Debian 工具构建源包时使用的 C++ 编译器标志。

这在例如 man 1 dpkg-buildflags 手册页中有记录:“供应商设置的默认值包括 -g 和默认优化级别(通常为 -O2,如果DEB_BUILD_OPTIONS 环境变量定义了 noopt)。"

在 Debian 之外,Gentoo recommends -O2 -pipe-march= 当前架构。 (-pipe 选项告诉 GCC 在构建期间使用管道而不是临时文件,这通常更快但在构建期间使用更多 RAM。它对编译的二进制文件没有影响。)

OpenWRT 这样的嵌入式系统经常使用 -Os 来生成更小的二进制文件。