相关疑难解决方法(0)

当运行从源构建的clang时,如何指定libc ++的位置,或者,有人向我解释-stdlib = libc ++是什么

我正在使用clang的规定开发插件和工具,通过插件和clang的LibTooling来实现.我能做以下事情:

  • 通过运行configure脚本(不使用cmake)按照入门页面编译来自svn(Linux和OSX)的clang里面的llvm
  • 在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++ macos clang

8
推荐指数
1
解决办法
1508
查看次数

clang ++ with c ++ 11 flag显示rvalue引用无法绑定到左值错误

我写了一个简单的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)

c++ clang c++11

3
推荐指数
1
解决办法
1743
查看次数

标签 统计

c++ ×2

clang ×2

c++11 ×1

macos ×1