问题标签 [libc++]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
873 浏览

c++ - OSX“ld”:如何显示未解析符号的错位名称?如何获取地图文件?

在 OS X 10.8.2(Mountain Lion)上,我正在尝试使用 libc++(不是 libstdc++)链接一个程序,并ld给我一个未解决的符号错误。

这似乎是指以下行的代码生成:

如果我将其更改为

然后一切正常,因为我们停止使用移动构造函数并开始使用非移动赋值运算符。

我正试图追查这一点,但由于缺乏我的传统工具而受到阻碍。两个问题立刻浮现在脑海:

  • 如何ld生成地图文件?这个链接器不起作用-map -Map -Wl,-map=foo -Wl,-Map=foo

    /li>
  • 如何ld向我显示未解析的 C++ 符号的未分解名称,以便我可以轻松地 grep 映射/nm 文件?

当然,如果有人以前见过这个特定的错误并且知道如何修复它,我也会接受这些答案。:)

编辑:我意识到我上面写的关于移动构造函数的内容没有意义,因为在我写这个问题的过程中症状发生了变化。:P 每当我对发生的事情有了更好的了解时,我都会修复它。

编辑#2:错误消失了。我暂时责怪我们自建的 libc++:我最好的猜测是它没有任何符号(由于构建错误的拱门),我们真的很幸运,我们从未尝试使用任何非内联函数,除了这个。

不过,我关于-map和显示错误名称的问题仍然悬而未决。

0 投票
1 回答
550 浏览

c++ - clang 的 libc++ 产品准备好了吗?

有没有人libc++在生产中使用clang有过积极的经验?http://libcxx.llvm.org/libcxx_by_chapter.pdf的状态图对我来说不是很好。

0 投票
1 回答
8989 浏览

c++ - 在 mac os x 的命令行中将 clang 与 libc++ 和 c++11 一起使用

如果启用 c++11 和 libc++,我什至无法使用 clang 编译一个简单的 hello world。例如下面的代码

当我运行时从编译中产生以下输出clang++ -std=c++11 -stdlib=libc++ main.cpp

如果我使用 xcode 并设置 libc++ 和 c++11 支持的选项,代码将编译得很好。

感谢您的任何回复

0 投票
2 回答
354 浏览

c++ - C ++ STL:创建std :: string的const副本时会更改c_str()吗?

这是关于 STL 实现在处理std::string. 我有这么短的测试,它执行 2 个 const 副本并打印由返回的地址c_str()

在我的带有 libstdc++.so.6.0.16 STL 的 gcc 4.6.2 上,所有指针都返回为相等的。

我可以依靠这种行为吗?

它是可移植的还是在最近的标准中定义的?

这是否适用于当前或未来版本的 libstdc++、libc++、Microsoft STL、stdcxx (apache.org)?

0 投票
1 回答
447 浏览

macos - clang 和 libc++ istream::peek() 没有设置 eof 标志

我正在使用 Mac OSX 10.8.1 (Mountain Lion) 和:Apple clang 版本 4.1 (tags/Apple/clang-421.11.66) (基于 LLVM 3.1svn) - 最新可用。

关于 eof 检测,使用 libc++ std::istream::peek() 的 Clang 似乎工作不正确。libstdc++ 没有出现问题。

下面的简单示例根据标准库版本给出不同的结果:

测试.cpp:

使用“clang++ -stdlib=libstdc++ test.cpp”编译的文件的输出(这看起来正确):

使用“clang++ -stdlib=libc++ test.cpp”编译的文件的输出(这对我来说看起来不正确):

此问题的最简单解决方法似乎是使用 libstdc++ 而不是 libc++。不幸的是,我需要使用一些 c++11 特性,所以 libc++ 是唯一的解决方案。

我在那里发现了一些帖子,它们报告了 libc++ 和 libstdc++ 在 eof 位行为中的差异,但与我的不同。

有没有人遇到和我一样的问题。有没有通用的解决方案来解决它?我可以想象一些肮脏的解决方法,但我宁愿不使用它。

预先感谢您的帮助

0 投票
1 回答
10317 浏览

c++ - C++ 11 线程与 clang

我想学习使用 C++11 线程来加速我的语言的编译(是的,我正在构建一个编译器:x)。我尝试的第一个示例使用 clang (3.3 SVN) 引发了几个错误。它在 GCC (4.6.3) 下编译得很好。

我从 llvm.org 的 SVN 下载了 clang 和 libc++。clang 是使用 GCC (4.6.3) 编译的,而 libc++ 是使用 clang 编译的。两个 makefile 都是用 CMake 生成的。

对于铿锵声,我遵循了本指南: http: //llvm.org/docs/GettingStarted.html#checkout

对于 libc++,我遵循了本指南: http: //libcxx.llvm.org/

我要编译的一段代码(foobar.cpp):

它编译得很好,clang --std=c++0x -stdlib=libc++ -lpthread foobar.cpp但我得到了很多链接器错误:

这是两个标准库下的标准搜索目录。由于 'clang -Wp,-v -x c++ - -fsyntax-only' 我得到了这个:

我试过clang --std=c++11 -stdlib=libc++ -llibc++ -lpthread -o foobar foobar.cpp但链接器再次失败,它没有找到 libc++。我是否无法链接到 libc++ 还是更困难?

0 投票
2 回答
1333 浏览

c++ - boost/thread.hpp 因“clang++ -std=c++11 -stdlib=libc++”而失败

尝试使用 clang + libc++(C++11 模式)编译这一行时:

clang 发出以下错误:

在我看来这是 libc++ 中的一个错误,因为 C++11 确实要求这些函数是constexpr.

有人遇到过同样的问题,你能同意吗?你知道任何修复吗?

我的clang版本是:

0 投票
1 回答
1816 浏览

c++ - libconfig++ -stdlib=libc++ 未定义符号

试图获得一个非常简单的 libconfig++ 工作示例。但是,由于编译器选项“-stdlib=libc++”和“-std=c++11”,我遇到了以下链接错误。

环境

达尔文 iMac.local 12.2.0

达尔文内核版本 12.2.0

xnu-2050.18.24~1/RELEASE_X86_64 x86_64

资源

建造

clang++ -o main main.cpp -lconfig++ -stdlib=libc++ -std=c++11

错误

0 投票
1 回答
1655 浏览

c++ - 为什么 is_swappable 和 is_nothrow_swappable 不包含在 C++11 中?

我惊讶地发现它is_swappable<T>不在is_nothrow_swappable<T>新的 C++11 type_traits 元函数中。它们noexcept对于模板的传播和确定是否可以为模板实现非抛出交换非常有用。

libc++ 推出自己的内部版本:请参阅其 type_traits 版本中的__is_swappable 和 __is_nothrow_swappable ,它在内部广泛使用它们,但不会使它们在库之外可用。

我最终将我自己的版本拼凑在一起用于个人项目,这似乎可行,但我确信它以某种方式损坏了。

我很好奇这两个的缺席,因为它们似乎很重要。这个特性是在 C++11 标准化过程中考虑的,还是只是疏忽没有包含在内?如果考虑,是什么导致它没有被纳入最终标准(缺乏时间、实施问题等)?是否有缺陷报告或进化论文讨论这个问题?有没有计划在 C++1Y 中加入这些特性?某处是否有公认的“正确”版本?

0 投票
2 回答
9957 浏览

c++ - 如何使用 Xcode 4.6.2 到 7.1.1 恢复对 Mac OS X 10.6 部署的 c++0x/c++11 支持

我在我的项目中大量使用了 c++0x/c++11 特性,尤其是代码块和共享指针。当我将操作系统升级到 10.8 Mountain Lion(编辑:从 10.7 开始)时,我被迫升级 Xcode。在升级 Xcode 时,我无法编译我的 c++ 项目以在 10.6 系统上部署,因为我收到以下错误。

clang: error: invalid deployment target for -stdlib=libc++ (requires Mac OS X 10.7 or later)

看来,Apple 试图通过不允许开发人员支持 Snow Leopard 来强迫人们进行升级。这让我很生气。啊啊啊!!!

我能做些什么?

编辑:经过多次评论后,应该明确的是 10.6 不附带系统 libc++ 库。因此,仅仅能够为 10.6 部署构建一个 libc++ 项目是不够的。您还需要在 10.6 发行版中包含 libc++ 二进制文件或静态链接到它们。因此,让我们继续假设我已经在这样做。

更新 1:此问题最初旨在与 Xcode 4.5.2 (提出问题时的最新版本)一起使用。我已经升级到 Xcode 4.6.3 并更新了问题和答案以反映这一点。

更新 2:我已经升级到 Xcode 5.0.2。下面所选答案中列出的技术仍然可以按预期工作。

更新 3:我已经升级到 Xcode 5.1。以下答案中列出的技术尚不适用于此版本!

更新 4:我已经升级到 Xcode 6.0.1。下面所选答案中列出的技术似乎再次起作用。

更新 5:我已经升级到 Xcode 7.1.1。下面所选答案中列出的技术似乎再次起作用,但有一个重要警告。您必须禁用用于AppThinning的 Bitcoding,因为开源 LLVM 版本不支持它(也不应该)。因此,您需要在开源和 Apple LLVM clang 之间切换,以便为 10.6 和 tvOS/watchOS 进行编译(因为这些操作系统需要位编码)。