问题标签 [libstdc++]
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.
macos - 如何在 OS X 上构建胖 gcc46 libstdc++?
我已经在我的 OS X 机器上成功构建并安装了 gcc 4.6.1,但我似乎无法让它为我创建一个胖/通用 libstdc++ 库。我如何让它做到这一点?
默认的 /usr/lib/libstdc++.6.dylib 支持以下架构:
我想让 gcc 给我一个 /usr/local/lib/libstdc++.6.dylib 用于那些相同的架构,但我尝试configure
使用--enable-multilib
or --with-multilib-list=i386,ppc,x86_64
or--enable-targets=all
显然被误导了。既不configure
也不make
产生错误,但所产生的只是:
centos - 由于较新的 libstdc++ 库,Yum 不会更新。我该如何解决?
每当我尝试通过“sudo yum update”更新我的系统时,我都会收到以下错误:
我不确定我是如何进入这种状态的,但我很确定我所做的一切都是通过 yum 完成的。
这是“yum list”为该库提供的内容:
请注意 i386 版本与 .x86_64 版本有何不同。这真的很奇怪。
我正在运行 CentOS 5.6 64 位。
我应该怎么办?
c++ - cout::sentry 中的免费 Pascal/C++ 项目崩溃
我有一个混合的 Free Pascal/C++ 项目。i386 上的 Debian 5.0(“Lenny”),FPC 2.4.4。cout<<
当我运行程序时,它在第一次调用时崩溃。有趣的是,它曾经工作了一段时间。一些操作系统更新可能会破坏它。这是孤立的问题:
帕斯:
c.cpp:
生成文件:
制作,运行,段错误。在全新的 Debian VM 上尝试过 - 结果相同。
崩溃发生在 basic_fstream::sentry::sentry() 中。cout
他们声称此崩溃位置与未初始化的全局对象一致。这很奇怪——我认为initc
从 Pascal 端使用可以确保初始化全局 C++ 变量。
请问有什么想法吗?会不会是我要链接的 libstdc++ 的版本(它是 libstdc++.so.6.0.10)?
编辑:它变得越来越奇怪。我在 CentOS 5.3 机器上运行相同的二进制文件 ( p
) - 它像宣传的那样工作。所以可能是关于共享库版本......我会去收集更多关于不同 Linux 的统计数据。
EDIT2:我注意到的一件事:当我ldd p
在我的 Debian 盒子上做时,这就是我得到的:
当我在它工作的 CentOS 盒子上做同样的事情时:
所以所有 C 库(不是 C++ 库)都来自i686/cmov
目录。Debian 机器也/lib/libc.so.6
有cmov
. 那个cmov
目录是怎么回事?为什么有两个同名的 libc 副本?
编辑:即使在 CentOS 上,也不会调用全局构造函数 - 只是使用临时全局对象进行测试。由于某种原因,它只是不会在 sentry() 中崩溃。看起来这毕竟是一个 FPC 问题。FPC 中有关于此行为的错误报告。
c++ - 使用带有初始化列表的 std::array
除非我弄错了,否则应该可以通过以下方式创建 std:array:
然而,使用 GCC 4.6.1 我无法让其中任何一个工作。编译器只是说:
然而初始化列表与 std::vector 一起工作得很好。那么它是哪一个?我是否误以为 std::array 应该接受初始化列表,或者 GNU 标准 C++ 库团队搞砸了?
c++ - 为什么将对象引用参数传递给线程函数无法编译?
我在使用新的 c++11std::thread
接口时遇到了问题。
我不知道如何将对 a 的引用传递给std::ostream
线程将执行的函数。
这是一个传递整数的示例(在 gcc 4.6 下按预期编译和工作):
但是当我尝试传递一个 ostream 时,它不会编译:
有没有办法做到这一点,或者根本不可能?
注意:从编译错误看来,它似乎来自已删除的构造函数......
libstdc++ - 为什么 JProfiler 包中包含 libstdc++ 和 libexpatlibs 库?
我看到 JProfiler 在库文件夹中带有 libstdc++ 和 libexpat。此外,标准位置库将首先加载,因为代理(libjprofilerti)稍后加载。
ldd -v 说这取决于打包的库。
为什么包含这些库?
c++ - 如何在两个容器的元素之间执行成对二元运算?
std::vector<uint_32> a, b;
假设我有两个我知道大小相同的向量。
是否有 C++11 范式用于在 and 的所有成员之间执行 a并将bitwise-AND
结果放入 中?a
b
std::vector<uint_32> c;
c++ - 这个 c++ 模板代码有效吗?g ++编译它,但clang不会
我正在尝试使用 Clang 和 Fedora 上的默认 C++ 标准库(4.6.2)编译一个小型 C++ 程序。Clang 本身可以编译,并且仅使用的测试程序可以编译并运行良好。
我的另一个程序使用了 clang 抱怨的绳索。
/usr/lib/gcc/x86_64-redhat-linux/4.6.2/../../../../include/c++/4.6.2/ext/ropeimpl.h:433:2:错误:使用未声明的标识符 '_Data_allocate' _Data_allocate(_S_rounded_up_size(__old_len + __len));
针对此错误消息已针对 clang 提交了一个错误,并且解决方案是 clang 是正确的,库代码无效。
Clang在这里是正确的。对 _Data_allocate 的调用中没有与类型相关的参数,因此名称查找在模板定义时失败。
失败代码的上下文:
我的问题是,如果此代码无效,是否有简单的解决方法?g++ 编译这个没问题。
java - Java Native Interface (JNI) 是否受 C++ ABI 兼容性问题的影响?
Java Native Interface (JNI) 是否受 C++ ABI 兼容性问题的影响?
我正在开发一个 Java 应用程序。我想使用 Java 本机接口 (JNI) 来调用 C++ 库中的函数。我可以访问 C++ 库的代码,并且可以根据需要重新构建它。(例如,我可以静态链接 C++ 运行时。)
我可以要求我的用户拥有 JRE 6 或更高版本,但我不能要求他们拥有任何特定的 C++ 运行时。
一位同事向我指出了这篇博客文章:http ://www.trilithium.com/johan/2005/06/static-libstdc/ ,它建议不要使用动态加载的 C++ 代码。
另一位同事向我指出了这个错误报告:http ://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4694590 ,其中详细说明了这些问题在 Java 1.4.2 中是如何解决的。
据我了解,问题的要点是 libstdc++ 的二进制接口经常发生变化。如果 C++ 应用程序加载使用不同编译器构建的 C++ 共享库,则两个不兼容的 libstdc++ 库将同时加载到内存中。
错误报告解释了 Java 1.4.2 的解决方案:“我们在 JDK 中静态链接 C++ 运行时并启用链接器脚本以隐藏 libstdc++ 和其他内部符号的符号。结果,这些符号对 JNI 代码变得不可见,并且当某些本机代码需要调用 C++ 运行时,调用将通过适当的 libstdc++.so 解析。仍然有两个 libstdc++.so 同时加载,但应该是良性的。”
我对此有几个问题。
首先,OpenJDK 是否继续采用这种方法?
[编辑:我在 OpenJDK 的 build-dev 邮件列表中提出了这个问题。答案是肯定的,HotSpot 仍然静态链接 libstdc++,但显然“大多数 Linux 发行版都对此进行了修补”。另一位开发人员指出,这甚至不需要补丁:“设置 STATIC_CXX=false 就足够了(默认为 true)。”]
其次,即使在这种情况下,同时加载两个不兼容的 libstdc++.so 真的是良性的吗?
第三,这种方法(隐藏 JDK 中的符号)是否解决了所有的兼容性问题?
上面引用的博客文章警告说“针对不同 ABI 编译的代码根本不兼容二进制”。后来,“语言运行时支持通常依赖于一些共享的数据,例如访问某种锁或全局数据结构(类似于 C 程序需要共享 errno)。”
这听起来像是问题无法解决。
再说一次,也许 ABI 不兼容不再是问题了。博客文章已有六年多的历史了。另一个 stackoverflow 问题(GCC ABI 兼容性)的一个答案断言“自 gcc-3.4.0 以来,ABI 是向前兼容的。” 那成功了吗?
我将不胜感激有关这些问题的任何指导。(嘿,感谢您阅读所有这些内容!)
编辑
我的问题变得很长,所以我没有提供所有细节。为了解决威尔的评论:
- 我只需要调用 extern "C" 函数。(例如,我使用 javah 生成 C 头文件。)
- 我不需要与 JVM 中的 C++ 运行时交互。(我基本上只需要将字符串发送到 C++ 库。)
c++ - libc++ 和 libstdc++ 之间的 istream eof 差异
以下(玩具)程序在与 libstdc++ 和 libc++ 链接时返回不同的内容。这是 libc++ 中的错误还是我不明白 istream eof() 的工作原理?我尝试在 linux 和 mac os x 上使用 g++ 并在 mac os x 上使用 clang 运行它,有和没有 -std=c++0x。我的印象是 eof() 在尝试读取(通过 get() 或其他方式)实际上失败之前不会返回 true。这是 libstdc++ 的行为方式,但不是 libc++ 的行为方式。