我正在使用Mac OS X 10.9(Mavericks)。我最近不得不使用CMake和OpenMP库编译代码。所以一开始我用xcode-select --install
下载了 XCode命令行工具。问题出在这里:XCode使用clang
编译器,它不带来OpenMP。所以我得到了gcc-4.9
brew
包管理器(GCC有OpenMP库)。
它工作正常,但使用它的命令是gcc-4.9
,CMake调用cc
命令。所以我搜索了一下,发现/usr/bin/cc
是/usr/bin/clang
的符号链接。我决定将其更改为/usr/bin/gcc
,但问题出在这里:我不知道这个文件是什么......
它看起来像clang命令文件:如果我没有任何参数运行它,我得到clang错误而不是gcc错误:
$ gcc
clang: error: no input files
$ gcc-4.9
gcc-4.9: fatal error: no input files
compilation terminated.
但它不是一个符号链接......这是ls -l
命令的结果:
-rwxr-xr-x 1 root wheel 14224 23 oct 07:40 gcc
(好像是我在小牛升级时创建的) 对于g ++来说,这是完全相同的。 它是一种铿锵的副本,有不同的名字吗?为什么Apple不使用符号链接?
所以如果有人在这里知道我是否可以删除这些文件以放置符号链接而没有任何问题(或更好的解决方案),请告诉我!
谢谢:)
答案 0 :(得分:0)
Apple 似乎使用 xcode-select
二进制文件重定向了一些常见的开发人员命令行工具。 /usr/bin/gcc
不是符号链接,而是调用一个小的二进制文件,它可以根据某些环境变量选择不同版本的 gcc
。
来自手册页:
xcode-select controls the location of the developer directory used by
xcrun(1), xcodebuild(1), cc(1), and other Xcode and BSD development
tools. This also controls the locations that are searched for by man(1)
for developer tool manpages.
This allows you to easily switch between different versions of the
Xcode tools and can be used to update the path to the Xcode if it is
moved after installation.
...
After setting a developer directory, all of the xcode-select provided
developer tool shims (see FILES) will automatically invoke the version
of the tool inside the selected developer directory.
我们可以通过查看二进制文件来确认(这是来自 OS 10.14.6):
$ otool -tvV /usr/bin/gcc
/usr/bin/gcc:
(__TEXT,__text) section
_main:
0000000100000f77 pushq %rbp
0000000100000f78 movq %rsp, %rbp
0000000100000f7b leal -0x1(%rdi), %eax
0000000100000f7e leaq 0x8(%rsi), %rdx
0000000100000f82 leaq 0x29(%rip), %rdi ## literal pool for: "gcc"
0000000100000f89 xorl %ecx, %ecx
0000000100000f8b movl %eax, %esi
0000000100000f8d callq 0x100000f92 ## symbol stub for: _xcselect_invoke_xcrun
关于该主题的一些文章: