Mac os x / usr / bin / gcc文件

时间:2013-12-18 16:43:09

标签: xcode macos gcc osx-mavericks

我正在使用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不使用符号链接?

所以如果有人在这里知道我是否可以删除这些文件以放置符号链接而没有任何问题(或更好的解决方案),请告诉我!

谢谢:)

1 个答案:

答案 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

关于该主题的一些文章: