我正在使用clang的规定开发插件和工具,通过插件和clang的LibTooling来实现.我能做以下事情:
在Linux上编译libcxx/libc ++(也来自svn),我没理由在OSX上遇到任何麻烦.问题是libc ++头文件已存在于我的OSX系统上
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/
Run Code Online (Sandbox Code Playgroud)
并且libc ++ dylib位于/ usr/lib /.
编辑4:我能够按照指示在OS X上编译libcxx.我有一个全新的libc ++.1.0.dylib现在坐在这里.
在OSX上,使用Release + Asserts(和Debug + Asserts)构建clang++来编译C++源代码,方法是附加
-I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/
Run Code Online (Sandbox Code Playgroud)
并且不使用-stdlib=libc++.使用此标志将libc ++显式指定为include目录允许我构建的clang"看到"标准c ++标头.令人惊讶的是,它在编译一个适度基本的源文件时仍然很满意(它仍然在其中运行了大量的c ++ 11疯狂)
基于此,您可以看到我正在修改我刚刚构建的clang version 3.6.0 (trunk 217905)用于查找Apple的Xcode打包的libc ++.这表面上看起来很有效,因为Apple的libc ++与Xcode一起提供的ABI兼容我刚从源代码构建的编译器.对我来说仍然很好奇的是我的新编译的clang能够找出在哪里找到相应的libc ++ dylib!这引发了后来我实际上编译libc ++时的问题,我该如何告诉我的新svn编译的clang查找并使用新的svn编译的libc ++ dylib?
所以,基本上,我还是心乱如麻什么,我真的应该做成立的libc ++正常.具体来说,当你说出来时clang 实际上做了什么-stdlib=libc++?
它是一个硬编码的包含路径吗?我可能想要从svn构建libc ++ abi和libc ++以与从svn构建的clang一起使用.这是最有意义的...然后我该如何安装呢?必须将-I~/libcxx/include/c++/v1/(或任何它可能的)放入构建配置是不优雅的.
据推测,我可以设置我的llvm构建来构建clang以及libc ++ abi和libc ++,同时从svn中查看libcxxabi和libcxx,我的期望是安装它应该-stdlib=libc++神奇地工作.另请注意,Apple为您提供Xcode的铿锵声并不需要您使用-stdlib=libc++.它只是神奇地知道在哪里抓取库文件.
然而!美中不足,至少是迄今为止我所知道的唯一一个:我的机器已经有了/usr/bin/clang++:
$ ls -la $(which clang++)
-rwxr-xr-x 1 root wheel 14240 Mar …Run Code Online (Sandbox Code Playgroud) 我写了一个简单的C++程序t.cpp:
// t.cpp
#include <vector>
#include <string>
using namespace std;
int main() {
vector<string> strVec;
string a("a");
strVec.push_back(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后,我在CentOS 6.5 x64上用clang ++ 3.4编译它.可以通过此命令编译它而不会出现任何错误:
clang++ t.cpp
Run Code Online (Sandbox Code Playgroud)
但是,如果我打开C++ 11标志,-std = c ++ 11:
clang++ -std=c++11 t.cpp
Run Code Online (Sandbox Code Playgroud)
我收到了很多错误消息:
In file included from t.cpp:1:
In file included from /usr/bin/../lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/vector:61:
In file included from /usr/bin/../lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_algobase.h:66:
In file included from /usr/bin/../lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_pair.h:60:
/usr/bin/../lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/move.h:57:14: error: rvalue reference to type 'basic_string<[3 * ...]>' cannot bind to lvalue of type
'basic_string<[3 * ...]>'
{ return __t; } …Run Code Online (Sandbox Code Playgroud)