MacPorts GCC 编译器、-Wa、-q 和 "(/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。如果我省略-Wa,-q,那么真实程序会经历类似于如何在Mac OS上使用AVX/PCLMULQDQ的故障。

如何告诉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测试。

您可以简单地做sudo port select clang mp-clang-3.8。我不喜欢这样,因为当简单地调用clang时,它会使默认值为默认值(当然,只有Macports在路径上时)。

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

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

然后我不将-Wa,-q参数用于gcc

一个人不需要弄乱编译器选项(-wa,-q)即可切换到Clang Integrated Assembler。可以触发相同的行为设置AS_Integrated_assembler环境变量,如我在此处所述。

我很确定版本不需要匹配。但是恐怕Macports必须走上这些工作。更重要的是,恐怕您必须"选择" 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
$

尝试symlink'ing/usr/bin/clang to/opt/local/bin/clang(对于/usr/bin/bin/clang ),看看它是否有帮助。并确保安装了CCTOOLS端口(尽管我无法想象它不在那里,因为GCC或Clang取决于它)。

和afaik," -wa,-q" 告诉GCC使用本机汇编器的方法(至少自XCode-6和GCC-4.8以来,它一直对我有用。

相关内容

最新更新