MacPorts GCC 编译器、-Wa、-q 和“(/opt/local/bin/clang) 未安装”

MacPorts GCC compiler, -Wa,-q and "(/opt/local/bin/clang) not installed"

我安装了 MacPorts GCC 编译器,并为集成汇编程序安装了 MacPorts Clang:

$ port installed | egrep -i '(gcc|g\+\+|clang)'
  clang-3.8 @3.8-r262722_1+analyzer (active)
  clang_select @1.0_0 (active)
  gcc49 @4.9.3_0 (active)
  gcc_select @0.1_8 (active)
  libgcc @6.1.0_0 (active)

当我尝试使用集成汇编程序编译一个空程序时:

$ cat test.cc 
int main(int argc, char* argv[])
{
    return argc;
}

它导致错误:

$ /opt/local//bin/gcc-mp-4.9 -Wa,-q -march=native test.cc -o test.exe
/opt/local/bin/as: assembler (/opt/local/bin/clang) not installed

并且:

$ ls /opt/local/bin/clang
ls: /opt/local/bin/clang: No such file or directory

使用集成汇编程序似乎不仅仅是 -Wa,-q. If I omit -Wa,-q, then the real program experiences a failure similar to How to use AVX/pclmulqdq on Mac OS X

如何告诉 GCC 编译器使用安装的 Clang 中的集成汇编器?即,clang++ -Wa,-q -Wa,as=/opt/local/bin/clang-mp-3.8

或者,这些东西是否需要在版本号很重要的情况下成对安装?也就是说,像 GCC 4.9(2016 年 1 月)这样的东西需要 Clang 3.7(2016 年 1 月)?

或者,MacPorts 通常将什么编译器放在 /opt/local/bin/clang?例如,Clang 3.5 通常位于 /opt/local/bin/clang


为完整起见,此 MacBook 具有 MacPorts,但不在路径上。我使用 MBP 进行 OS X 测试,第二个角色是 [即将成为] MacPorts 测试。但是,我没有将 MacPorts 放在路径上以避免污染 OS X 测试。

我很确定版本不需要匹配。但恐怕 Macports 必须在这些工作的道路上。更重要的是,恐怕你必须 "port select" gcc...

这是我的有效设置:

$ port select --list clang
Available versions for clang:
    apple-clang (active)
    mp-clang-3.7
    none
    uri-clang
$ ll /opt/local/bin/clang
lrwxr-xr-x  1 root  admin  14 Jan 21  2015 /opt/local/bin/clang@ ->    /usr/bin/clang
$ port select --list gcc
Available versions for gcc:
    apple-gcc
    mp-gcc6 (active)
    none
$ ll /opt/local/bin/gcc
lrwxr-xr-x  1 root  admin  23 May  6 17:13 /opt/local/bin/gcc@ -> /opt/local/bin/gcc-mp-6
$ file /opt/local/bin/as
/opt/local/bin/as: Mach-O 64-bit executable x86_64
$ port provides /opt/local/bin/as
/opt/local/bin/as is provided by: cctools
$ $ port dependents cctools
gcc6 depends on cctools
libgcc depends on cctools
$

尝试将 /usr/bin/clang 符号链接到 /opt/local/bin/clang(/usr/bin/clang++ 也是如此),看看是否有帮助。并确保安装了 cctools 端口(尽管我无法想象它不存在,因为 gcc 或 clang 都依赖于它)。

据我所知,“-Wa,-q” 告诉 GCC 使用本机汇编器的方法(至少自从 Xcode-6 和 GCC-4.8).

你可以简单地做 sudo port select clang mp-clang-3.8。我不喜欢这样,因为它在简单地调用 clang 时将其设置为默认值(当然,只有当 MacPorts 在 PATH 上时)。

我最后做的是用以下简单脚本替换 /opt/local/bin/as

#!/bin/sh 
clang -c -x assembler $@ - 

然后我不使用 gcc-Wa,-q 参数。

不需要为了切换到 clang 集成汇编程序而弄乱编译器选项 (-Wa,-q)。正如我解释的 here.

一样,可以触发设置 AS_INTEGRATED_ASSEMBLER 环境变量的相同行为