如果我使用 automake 构建一个库,如果没有指定目标系统的特定标志,结果是否会根据构建发生的系统而变化?这意味着 64 位操作系统上的编译器将产生 64 位结果,而 32 位操作系统上的编译器将产生 32 位结果? (我使用的是 Fedora 16 和 g++ 编译器)
答案1
我假设二进制输出将与您正在运行的体系结构相同......除非存在更改此行为的标志。因此,您可以通过编译某些内容然后对二进制文件执行文件命令来验证这一点。这将告诉您是 64 位还是 32 位。
答案2
是的,除非您特意进行了不同的设置,否则 GCC 将为您的处理器架构进行编译。 (通用架构,而不是您的特定 CPU 变体 - 在您的情况下是 amd64 又名 x86_64)。
在 64 位 GCC 的典型安装中,传递-m32
编译相应的 32 位架构(例如 amd64 系统上的 x86)。运行gcc --print-multi-lib
看看支持哪些架构。
答案3
如果特定项目对仅 32 位的库没有显式或隐式依赖项,automake
则将编译 64 位可执行文件。
随着 64 位系统的丰富以及过去仅 32 位的事物的重新实现,这种情况在现代系统上不会发生(即 2010 年以后,包括 Fedora 16)