未安装MacPorts GCC编译器,-Wa,-q和"(/ opt / local / bin / clang)"

时间:2016-06-16 09:58:57

标签: macos gcc assembly macports

我安装了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,那么真正的程序会遇到与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测试。

3 个答案:

答案 0 :(得分:2)

您可以执行sudo port select clang mp-clang-3.8。我不喜欢这个,因为它只是在调用clang时将其设为默认值(当然,只有当MacPorts在PATH上时)。

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

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

然后我不使用-Wa,-q的{​​{1}}个参数。

答案 1 :(得分:2)

为了切换到clang集成汇编程序,不需要弄乱编译器选项(-Wa,-q)。根据我解释here,可以触发设置AS_INTEGRATED_ASSEMBLER环境变量的相同行为。

答案 2 :(得分:1)

我很确定这些版本不需要匹配。但是我担心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添加到/ opt / local / bin / clang(对于/ usr / bin / clang ++也是如此),看看它是否有帮助。并确保安装了cctools端口(虽然我无法想象它不存在,因为gcc或clang依赖于它)。

而AFAIK,“-Wa,-q”告诉GCC使用本机汇编程序的方式(至少从Xcode-6和GCC-4.8起它一直在为我工作)。