MacOS 上的 gcc 4.8 根据 -arch 顺序失败

MacOS 上的 gcc 4.8 根据 -arch 顺序失败

我正在尝试在我的计算机上安装最新版本的 gcc 4.8.2。我尝试过来自 MacPorts 的安装以及与 gfortran 二进制安装一起安装的安装。

对于最小源文件,我会根据 -arch 标志的顺序收到错误。

具体来说, -arch x86_64 -arch i386(或单独使用其中任何一个)的工作原理是:

% /opt/local/bin/gcc-mp-4.8 -arch x86_64 -arch i386 conftest.c
% /opt/local/bin/gcc-mp-4.8 -arch x86_64 -arch i386 -O3 conftest.c

-arch i386 -arch x86_64失败了:

% /opt/local/bin/gcc-mp-4.8 -arch i386 -arch x86_64 conftest.c
/var/folders/6l/7gzvw1zs42sbhj7_hlrpykfm0000gv/T//cc6JCBdP.s:5:bad register name `%rbp'
/var/folders/6l/7gzvw1zs42sbhj7_hlrpykfm0000gv/T//cc6JCBdP.s:7:bad register name `%rsp'
/var/folders/6l/7gzvw1zs42sbhj7_hlrpykfm0000gv/T//cc6JCBdP.s:10:bad register name `%rbp'

% /opt/local/bin/gcc-mp-4.8 -arch i386 -arch x86_64 -O3 conftest.c
/var/folders/6l/7gzvw1zs42sbhj7_hlrpykfm0000gv/T//ccs67E0q.s:34:FATAL:Bad fx_size (0x8) in fix_to_relocation_info()

帮助!

最小来源:

 int main ()
 {
  return 0;
 }

详情请见:

% /opt/local/bin/gcc-mp-4.8 --version
gcc-mp-4.8 (MacPorts gcc48 4.8.2_0+universal) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

答案1

gcc其开发人员发布的/g++不支持-arch同时支持多个标志。只有 Apple 修改的gcc/版本g++(例如 Apple 发布的 Xcode 版本低于 4.2 的版本)才支持该功能。

要使用非 Apple gcc/为多种架构进行编译g++,请分别为每种架构进行编译,然后使用 合并结果lipo

/opt/local/bin/gcc-mp-4.8 -arch x86_64 -o conftest-x86_64 conftest.c
/opt/local/bin/gcc-mp-4.8 -arch i386 -o conftest-i386 conftest.c
lipo conftest-x86_64 conftest-i386 -create -output conftest

相关内容