问题标签 [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.

0 投票
1 回答
628 浏览

c++ - 什么是“.text 符号 `._XXXXXXXXX 的无法识别的存储类 111”?

尝试对在 AIX 5.3 上编译的可执行文件或共享库执行 objdump 时,我多次收到此错误消息。对于这台机器上的任何其他可执行文件,它都可以正常工作。这个可执行文件也会在运行时崩溃(在字符串赋值时)。

我不确定它是否重要,但在链接过程中我有几个警告,例如: ld: 0711-224 警告:重复符号:非虚拟 thunk 到 XYZ::~XYZ() 整个可执行文件是直接从 .o 文件构建的(和一个外部库,但我确信它很好)。

有些东西告诉我它可以连接到弱符号,但我不知道如何解决这个问题。知道可能出了什么问题,或者我可以检查什么以继续进行此操作吗?

我还尝试将所有 cpp 文件包含在一个大文件中,然后编译它。我仍然遇到分段错误,但在其他地方(现在在 g_strXXXXX.erase() - 擦除全局字符串)。部分堆栈跟踪如下所示:

(...)

.#3 0x101d8534 in __static_initialization_and_destruction_0(int, int) (__initialize_p=1, __priority=65535) at ../../licserver/someclass1.cpp:4

.#4 0x101d8df0 in GLOBAL _I_fc_softc () at ../../shared/someclass1.cpp:225

.#5 0x103c81fc in GLOBAL _FI_licserver_unittest ()

.#6 0xd03aadb0 in mod_init1 () from /usr/lib/libc.a(shr.o)

.#7 0xd03aacc4 in __modinit () from /usr/lib/libc.a(shr.o)

.#8 0x100001d4 in __start () (gdb) GLOBAL _I_fc_softc

所以看起来 libc 或 libstdc++ 有问题?

0 投票
4 回答
13779 浏览

c++ - libstdc++ GLIBCXX 版本错误

当我使用 g++ 在我的计算机中编译一个 c++ 程序并传输可执行文件以在我的大学服务器上运行它时,我得到

该程序在我的计算机上运行良好,我没有权限在我的大学服务器上安装任何新软件。

有什么帮助吗?谢谢

0 投票
3 回答
3011 浏览

c++ - 使用哪个版本的 libstdc++.so.6?

我在 Solaris 上使用第三方共享库 (libsw_api.so),当我尝试加载时,会产生以下错误:

当我在 libsw_api.so 上运行 ldd 时,所有引用似乎都已完成,特别是指向 libstdc++.so.6.0.3 的 C++ 标准库:

但是,该库不导出 _ZNKSt9bad_alloc4whatEv,

可能是什么问题呢?版本不对?我不太擅长 Unix 上的 C++,所以我很感激任何帮助。

这种 SPARC32PLUS 与 SPARC 的不匹配是否会成为问题的原因?

我的系统:

0 投票
2 回答
1344 浏览

c++ - std::vector 构造函数行为

采取以下代码:

此代码不能使用 libstdc++ 编译。但是,它确实可以使用 Visual Studio 的 C++ 库进行编译。我期望的行为v是填充了 10 个大小为 10 的向量,这就是我使用 Visual Studio 得到的。

使用 Visual Studio 调用的构造函数是采用两个迭代器的构造函数。构造函数本身定义为:

模板函数有两个版本_Construct。两者具有相同的签名,但一个从一个范围初始化向量,另一个用从第二个参数构造的值类型副本的 N 个副本初始化向量。在这种情况下,模板参数仅对第二个版本有效_Construct

结果是v填充了从值 10 构造的向量的 10 个副本。通过像这样构造它采用相同的代码路径,因为您必须使用 libstdc++ 来获得相同的效果:

这里哪个实现是正确的?这是 libstdc++ 错误还是 Visual Studio 的 C++ 库的扩展?

编辑:只是为了澄清,我不是在问它是否应该调用范围构造函数。我在问哪个 C++ 实现具有正确的行为,无论它采用哪条路径来实现它。

0 投票
3 回答
11541 浏览

c++ - 与 mkstemp 等效的 C++ 标准库是什么?

我正在将使用临时文件的程序从 POSIXFILE转换为 C++ 标准库 iostream。mkstemp 的正确替代方法是什么?

0 投票
2 回答
924 浏览

gcc - 如何重新打包 gnu gcc 标准库 stdc++、gcc 和 gcc_eh?

在不修改和重新编译 gnu gcc 和 stdc++ 库构建的情况下,我需要能够使用不同的嵌入式 soname 重现这些库的动态加载版本。

我想我会很聪明,使用可用的静态版本并用这样的东西重新打包它们: ld -E -shared -static "-lstdc++" -lgcc -lgcc_eh -o librepackaged_standard.so

librepacked_standard.so 已创建,没有警告或错误,但 ldd 报告它不是动态库,而 readelf 仅报告以下基本符号:

我不确定为什么 ld 没有引入所有静态定义的符号。我也不知道是否需要提供任何其他特殊参数才能使其正常工作。

另一种选择是,如果有一种已知的跨平台方式来简单地更改嵌入在原始精灵库中的 soname。我目前只关心精灵格式的二进制文件。我对编写自己的工具来更改现有二进制文件中的 .soname 不感兴趣。

更新:没有符号被编译的原因是因为ld处理静态二进制文件与 .o 文件不同。默认情况下,它不会从 .a 文件中导入任何符号,除非链接行上的另一个库需要它们。我通过提供 --whole-archive 选项解决了这个问题。

但是,这给了我另一个错误,relocation R_X86_64_32S against_ZSt12_S_first_one' 在制作共享对象时不能使用;使用 -fPIC 重新编译and无法读取符号:错误值` 它们都来自 bitset.o 存档中的 libstdc++.a。所以我不能只将 .a 重新编译成动态库,因为默认情况下,GNU GCC 编译器不会使用 PIC 选项编译用于静态库的目标文件。

这让我不得不找到一个精灵工具或重新编译 GNU GCC 并对其构建进行修改。

正如其中一个答案所述,许可问题可能是这些方法中的任何一个都存在的问题。我最好的答案是我们需要改变我们的要求并找到一个不涉及以任何方式更改或重新打包 GCC 标准库的不同解决方案。

0 投票
2 回答
3167 浏览

c++ - G ++中的SGI STL绳索?

/usr/include/c++/4.5.1/ext/rope我的(和ropeimpl.h)中似乎有绳索的实现。我将它与 SGI STL 进行了比较,代码似乎几乎是相同的代码库。

我不知道它的状态或它的功能是否正常。我也不知道这是超级陈旧的代码,还是正在进行中的代码

无论如何,我还没有找到任何关于如何使用它的参考资料(如果可以的话)。你知道我错过了什么吗?有我可以使用的用法示例吗?

编辑如果你在这里看到 cvs 历史,你会看到最后一次活动是 4 个月前,这看起来不太活跃,但看起来也没有被遗弃。

0 投票
2 回答
6007 浏览

c++ - 将 std::shared_ptr 与 clang++ 和 libstdc++ 一起使用

我正在尝试使用 libstdc++(4.6.1) 在 clang++(clang 版本 3.1 (trunk 143100)) 中使用 std::shared_ptr。我有一个小演示程序:

可以使用以下方法构建:

并给出以下错误输出:

由于某种原因,它需要被删除的构造函数,因为提供了移动构造函数(这是正确的行为)。但是为什么它可以与 (g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1.) 一起编译?有人对如何解决这个问题有任何想法吗?

0 投票
1 回答
590 浏览

gcc - clang 无法解析包含 libstdc++ (gcc4.4) 的源

我最近编译了新的clang(现在是3.1),并试图用它来解析我的项目,但是它在解析标准库/包含时失败了......例如我看到以下错误:

/usr/include/c++/4.4/cstddef:51:9: 错误:预期';' 在顶级声明符或 /usr/include/c++/4.4/bits/cpp_type_traits.h:71:3: 错误:未知类型名称“模板”之后

显然clang无法解析这些文件,但这些是标准的libstc文件..我该怎么办?

0 投票
1 回答
2804 浏览

linux - 在编译时链接与在运行时链接针对 std:: 库

首先是问题:我需要一种无需在 /etc/ld.so.conf.d 中放置配置文件的方法,以允许客户端使用默认安装的 gcc 在 RHEL5.7 和 RHEL6.1 上针对我的 SDK 进行构建。在这种情况下,设置 LD_LIBRARY_PATH 不起作用。是否有任何其他方法可以让客户链接到我的 sdk,而无需向他们提供有关如何配置其系统的知识库文章?请阅读以下内容进行说明。

第二个场景:

我负责在 RHEL5 和 RHEL6 上构建运行时 SDK。我的 RHEL5.7 和我的 RHEL6.1 一样是标准的非注册安装。但是,在我的 RHEL6 机器上,我自己编译了 gcc:

--

--

我无法提供我试图链接的 .so 和 .a 文件。但是,我将尝试描述正在发生的事情。采用相同的源代码并针对我的 SDK 构建它并运行它。我得到以下结果:

RHEL 6 盒:

如果我运行以下命令:export LD_LIBRARY_PATH=/usr/local/lib64:${LD_LIBRARY_PATH}; ./Session2或在 /etc/ld.so.conf.d 中设置 libstdc++ 编译版本的路径,则应用程序运行。

RHEL5 盒子:

这是一篇很长的帖子,我想我已经提供了足够的帮助来开始提供帮助。如果您需要任何具体的帮助,请告诉我。

关于我链接的 libstdc++ 的最后一点信息。

RHEL5: