问题标签 [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.
pointers - STL 容器、分配器和指针包装器
我制作了一个自定义的平板分配器,它使用 mmap 来分配固定大小的段池。这些段在逻辑上是连续的,但在物理上是离散的。我还定义了一个指针包装类,它包含从池的逻辑起点的偏移量。指针类如下所示:
这是分配器:
然后我根据 STL 要求定义了 pointer_traits 和 iterator_traits 类:
当我在 libc++ 中将这些类与 STL 容器一起使用时,在 c++/v1/vector 中出现了几个编译错误:
Vector 在指针类型上使用 const_cast<> , const_cast<> 只能与原始指针/引用一起使用并且不能重载,这意味着无法使用自定义的类指针对象。
我做错了什么还是只是 libc++ 中 STL 实现的一个缺陷?
c++ - 流式传输字符串流是 libstdc++ 扩展吗?
流式传输是stringstream
libstdc++ 扩展吗?该程序使用and编译gcc-4.2
,gcc-4.7-2 (using -std=c++03)
和 clang 3.2 (感谢 Andy Prowl,请参阅评论)。它不能使用和编译。-std=c++11
libstdc++
clang 3.2
-std=c++11
-stdlib=libc++
通过查看 ofstream 的构造函数,它可以采用 astd::basic_streambuf<CharT, Traits>*
或 a basic_ostream& st
。stringstream 是 a std::basic_istream
,但是两者都是,std::basic_ios<CharT, Traits>
所以我猜它应该可以工作。
以下更改使代码在 clang 下编译:
正确的方法是什么?cout << s;
还是cout << s.str();
?
c++ - 如何针对在 xcode/clang/macos 中使用 libc++ 编译的静态库编译应用程序?
当我尝试编译测试控制台应用程序以在同一工作区上测试静态库上的某些功能时,我在二进制文件的链接阶段遇到了问题,只有当我选择使用 libc++ 标准库时才会发生这种情况。
缺少符号错误如下:
当我在两个目标中选择 stdlibc++ 时,一切都编译正常并且运行正常。
我的问题是:
- 在静态库上使用 libc++ 有一些限制吗?
- 它是苹果/clang++ 链接器工具中的一个错误?
- 如何配置项目以将 libc++ 与我的静态库一起使用?
- 为什么链接器工具在静态库上找不到标准 c++ 库的符号?(任何其他依赖的库都是针对 libc++ 编译的)
- 我应该忘记使用 libc++ 的想法吗?
笔记:
- 静态库依赖于 libboost_system,我用 libc++ 和 libstdc++ 编译,结果相同
- 当我使用“bjam”工具运行测试时,它运行正常,也许 jam 文件选择 libstdc++ 来编译文件。
- 我知道更改标准库可以解决链接问题,我只想知道这是为什么。
更新:当我在静态库项目中删除对 string::empty 的引用时,依赖于 libc++ 的项目可以正常编译并运行,但它会进入无限循环。
更新 2:当我用 libstdc++ 编译整个东西时,删除 string::empty 引用没有任何效果,它运行良好。没有循环,这让我认为这是一个错误或类似的东西。
更新 3:当它编译时,这是程序无限循环的地方:
c++ - istream::peek() 不应该总是返回你刚刚 putback() 的内容吗?
直观地说,从 C++ 规范来看,在我看来,它似乎istream::putback( c )
应该总是安排输入缓冲区,以便下一次调用istream::peek()
应该读取字符c
。这不正确吗?我问是因为 Xcode 4.6 附带的最新版本的 libc++ 似乎并未在所有情况下都强制执行此行为——尤其是当最后一个字符位于 EOF 时。如果您使用unget()
而不是putback( c )
.
libc++ 的行为是正确的,还是我对如何putback()/unget()
工作的直觉正确?
考虑这个示例代码,它适用于 libstdc++ 但不适用于 libc++(断言失败)。
linux - 我应该使用 libc++ 还是 libstdc++?
我正在使用 c/c++ 为 osx 和 linux 开发命令行界面可执行文件。该项目将链接到opencv。我应该使用 libc++ 还是 libstdc++?
libc++ - clang++ 找不到文件
我正在尝试使用 clang 编译我的 c++ 项目(使用带有 boost 的 g++)。我已经使用 clang 工具链成功编译了 boost-libraries (1.53)。我正在使用 CMake 编译我的项目,编译失败并出现以下错误。
我正在传递-stdlib=libc++
给编译器。我不确定应该安装哪个软件包(ubuntu)来安装 libc++。我的机器上安装了 clang 和 llvm。
我必须下载和编译 libc++ 还是在安装 clang 时自动安装?
ios - 适用于 iOS 和 libc++ 的 Google Maps SDK
在我们的项目中,我们使用在其实现中非常紧密地使用 libc++ 的库。当我们添加 Google Maps SDK 时,我们得到了链接错误:
发生这种情况是因为 google maps sdk 使用 libstdc++ 库,但我们无法更改使用 libc++ 的代码。我们尝试将使用 libc++ 的代码和库封装在静态库 (*.a) 中,但没有成功。有机会让事情发挥作用吗?也许,可以将 Google Maps SDK 与 libc++ 链接起来?
c++ - 如何使用 libc++ istream_iterator 读取文件中的 0xFF?
考虑以下示例代码:
以及一个包含以下内容的输入文件:“foo\xffbar”:
现在使用 clang libc++ 与 gnu libstdc++ 进行测试:
如您所见,libc++ 版本认为 0xff 是流的结尾并停止读取。所以这导致了几个问题。
1) 这是我应该报告的 libc++ 中的错误吗?我对现有错误的谷歌搜索一无所获。
2)有没有解决这个问题的好方法?
编辑
以下代码有效:
让我相信这是一个二进制转换问题,但这并不能解释为什么 libstdc++ 可以正常工作。
编辑2
使用没有二进制文件的文件也可以正常工作:
所以肯定有一些可疑的事情发生。看起来这可能是 cin 实现中的问题,而不是迭代器。
macos - 如何构建 LLVM 并将其与 libc++ 链接?
我正在尝试构建 LLVM 并将其与 libc++ 链接,但我无法让它工作。我下载了最新版本(LLVM 3.2)。
在Gist上完成输出。
LLVM 可以使用 libstdc++ 编译和链接,但不能使用 libc++。我不知道为什么它不会与 libc++ 链接;其他程序只是链接正常。我正在运行 OS X Mountain Lion,而 libc++ 位于/usr/lib/libc++.1.dylib
. 使用的编译器是Apple clang 版本 4.0 (tags/Apple/clang-421.0.60) (基于 LLVM 3.1svn)。
c++ - libc++ std::search_n 中的这种崩溃是一个错误吗?
我已经尽可能缩小了范围,这似乎是一个错误......
我明白了
我希望我没有错误地使用 std::search_n :)
目前,使用 LLDB 似乎不可能逐步完成 STL 实现。
版本信息:
证据 ;)