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 环境变量的相同行为
我安装了 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 环境变量的相同行为