在 linux 台机器上构建运行时的编译标志
Compilation flags to build runtime on linux machines
哪些编译器标志用于构建标准 c/c++ 库,如 glibc
和 libstdc++
?
它们在 debian、fedora、archlinux 等发行版中是否相同?
在 debian 机器上有 dpkg-buildflags
但我不确定它们是否被关键运行时库覆盖。
一个公因数是 -O2
,最常见的是 -O2 -g
(启用 gdb 调试符号)。 -O2
绝对是预期的优化级别维护者假设应该编译包。
如果您查看 Debian 源代码包中的 debian/rules
(或 -debian.tar.* tarball),您通常会发现 HOST_CFLAGS
和 HOST_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
来生成更小的二进制文件。
哪些编译器标志用于构建标准 c/c++ 库,如 glibc
和 libstdc++
?
它们在 debian、fedora、archlinux 等发行版中是否相同?
在 debian 机器上有 dpkg-buildflags
但我不确定它们是否被关键运行时库覆盖。
一个公因数是 -O2
,最常见的是 -O2 -g
(启用 gdb 调试符号)。 -O2
绝对是预期的优化级别维护者假设应该编译包。
如果您查看 Debian 源代码包中的 debian/rules
(或 -debian.tar.* tarball),您通常会发现 HOST_CFLAGS
和 HOST_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
来生成更小的二进制文件。