mac 系统路径下的clang,clang++,ld,c++ 与xcode下的是否同一个

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mac 系统路径下的clang,clang++,ld,c++ 与xcode下的是否同一个相关的知识,希望对你有一定的参考价值。

如题,
1)/usr/bin/下的 这些编译相关的工具命令,如 clang,clang++,ld,c++等与/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/路径下的这些工具是不是同一个?
2)当我需要交叉编译时是直接使用gcc g++ 还是用/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/路径下的cc,c++

3) /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/路径下没有gcc g++ 命令,那么/usr/bin下的gcc ,g++ 是指向的谁,为什么我用ls -l 命令看不到他们指向什么文件

参考技术A 其实xcode自带的就有clang,版本也非常非常新。但是缺了一些我需要的组件,于是我得自己重新编译一下。但是我又不想覆盖原来的clang/libc++。因为那很危险,万一我编译的libc++有bug,而我又拿它覆盖了系统本身的libc++,那么我很可能连系统都进不去了。Linux用户不妨对比下自行编译glibc的风险。

我也不知道apple对clang改了什么,我是从llvm官网上下载代码并编译。www.it165.net

官网有文档,但是那文档有些问题。在我机器上行不通。我摸索出另一个办法。

首先编译llvm/clang

目录树如下:

llvm: http://llvm.org/svn/llvm-project/llvm/trunk

llvm/tools/clang: http://llvm.org/svn/llvm-project/cfe/trunk

llvm/tools/clang/tools/extra:
http://llvm.org/svn/llvm-project/clang-tools-extra/trunk

llvm/projects/compiler-rt:
http://llvm.org/svn/llvm-project/compiler-rt/trunk

然后在llvm目录下运行

./configure —enable-libcpp —enable-cxx11 —enable-keep-symbols —disable-docs
—enable-debug-runtime —enable-debug-symbols —enable-optimized
CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++

make

make install

XCode软件包里我故意删掉了command line tools,以免造成冲突。

然后就是libcxxabi和libcxx

libcxxabi: http://llvm.org/svn/llvm-project/libcxxabi/trunk

libcxx:http://llvm.org/svn/llvm-project/libcxx/trunk

先装abi,后装libcxx。

buildit之前先export TRIPLE=-apple-

这还不够,打开lib/buildit文件,把install_name后面的/usr/lib/libc++abi.dylib
改成/usr/local/lib/libc++abi.dylib 才行。

然后

./buildit

手动将编译好的文件copy到/usr/local/lib目录下。

然后libcxx也是类似,先修改buildit文件。

这些都完成之后,还不够。编译的时候要先用-nostdinc++禁止从/usr/lib目录下寻找头文件和库文件。然后手动把我们的目录包含进去,如下:

clang++ -o t -nostdinc++ -std=c++11 -stdlib=libc++ -I /usr/local/lib/c++/v1
-L/usr/local/lib test.cpp

之后再用otool 看就对了

$ otool -L ./t

./t:

/usr/local/lib/libc++.1.dylib (compatibility version 1.0.0, current
version 1.0.0)

/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
version 169.3追问

能不能好好回答?

clang 格式,数组初始化器

【中文标题】clang 格式,数组初始化器【英文标题】:clang-format, array initialisers 【发布时间】:2016-10-29 17:50:06 【问题描述】:

在我们的项目中,我们有时将数组初始化为一行,有时将它们初始化为块。那就是

strings::UniChar const s[] = 'H', 'e', 'l', 'l', 'o';

字符串::UniChar const s[] =

  'H',
  'e',
  'l',
  'l',
  'o'
;

我想clang-format 能够区分这两种类型,而不是将第二种类型转换为第一种类型或对齐左大括号后的元素。不是这样的:

strings::UniChar const s[] = 'H',
                              'e',
                              'l',
                              'l',
                              'o';

有没有办法使用配置文件来实现?

【问题讨论】:

你为什么不为那些带有/* clang-format off */的声明禁用clang格式 这是我考虑的选项之一,我希望有一种自动化的方式来做到这一点。 【参考方案1】:

在最后一个数组元素之后添加一个逗号会导致 clang-format(使用 v6.0.0 尝试)将元素对齐到左侧,就像您的第二个示例一样。

// With a trailing comma.
char buf[] = 
  'a',
  'b',
;

// Without a trailing comma.
char buf2[] = 'a', 'b';

【讨论】:

【参考方案2】:

试试“Cpp11BracedListStyle: false”

【讨论】:

以上是关于mac 系统路径下的clang,clang++,ld,c++ 与xcode下的是否同一个的主要内容,如果未能解决你的问题,请参考以下文章

让你的checker出现在clang的checker list中

Mac如何安装clang,求最新方法

如何设置来用clang/clang++替换Linux下的默认编译器Gcc

mac 使用gcc 为啥编译错误是clang 提示

Mac 运行 OpenMP,“clang:错误:不支持的选项 '-fopenmp'”

强制mac使用GCC,而不是clang