我安装了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测试。
答案 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起它一直在为我工作)。