标签: libstdc++

/usr/lib/libstdc++.so.6:未找到版本`GLIBCXX_3.4.15'

如何在Ubuntu中获得GLIBCXX_3.4.15?我无法运行一些我正在编译的程序.

当我做:

strings /usr/lib/libstdc++.so.6 | grep GLIBC
Run Code Online (Sandbox Code Playgroud)

我明白了:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

c++ gcc libstdc++

131
推荐指数
4
解决办法
28万
查看次数

关于正则表达式的gcc 4.8或更早的bug吗?

我试图在C++ 11代码中使用std :: regex,但看起来支持有点儿错误.一个例子:

#include <regex>
#include <iostream>

int main (int argc, const char * argv[]) {
    std::regex r("st|mt|tr");
    std::cerr << "st|mt|tr" << " matches st? " << std::regex_match("st", r) << std::endl;
    std::cerr << "st|mt|tr" << " matches mt? " << std::regex_match("mt", r) << std::endl;
    std::cerr << "st|mt|tr" << " matches tr? " << std::regex_match("tr", r) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

st|mt|tr matches st? 1
st|mt|tr matches mt? 1
st|mt|tr matches tr? 0
Run Code Online (Sandbox Code Playgroud)

当使用gcc(MacPorts gcc47 4.7.1_2)4.7.1编译时,使用

g++ *.cc -o test -std=c++11 …
Run Code Online (Sandbox Code Playgroud)

c++ regex gcc libstdc++ c++11

98
推荐指数
2
解决办法
3万
查看次数

拥有空对基类的目的是什么?

libstdc++的 pair 实现有以下奇怪之处

template<typename, typename> class __pair_base
  {
    template<typename T, typename U> friend struct pair;
    __pair_base() = default;
    ~__pair_base() = default;
    __pair_base(const __pair_base&) = default;
    __pair_base& operator=(const __pair_base&) = delete;
  };

template<typename T, typename U>
  struct pair
  : private __pair_base<T, U>
{ /* never uses __pair_base */ };
Run Code Online (Sandbox Code Playgroud)

__pair_base从未使用过,也不能使用,因为它是空的。这是特别令人迷惑,因为std::pair需要是有条件的结构

pair<T, U>如果TU都是结构类型,则是结构类型。

拥有私人基地使其成为非结构性的。

c++ libstdc++

85
推荐指数
1
解决办法
2460
查看次数

静态链接libstdc ++:任何陷阱?

我需要使用GCC 4.7的libstdc ++将构建在Ubuntu 12.10上的C++应用程序部署到运行Ubuntu 10.04的系统,该系统附带了相当旧版本的libstdc ++.

目前,-static-libstdc++ -static-libgcc正如本博客文章所建议的那样,我正在编译:静态链接libstdc ++.作者在静态编译libstdc ++时警告不要使用任何动态加载的C++代码,这是我尚未检查的内容.到目前为止,一切似乎都很顺利:我可以在Ubuntu 10.04上使用C++ 11功能,这就是我所追求的.

我注意到这篇文章是从2005年开始的,从那以后可能发生了很大变化.它的建议仍然是最新的吗?我应该注意哪些潜在的问题?

c++ linux gcc static-libraries libstdc++

81
推荐指数
2
解决办法
5万
查看次数

我应该使用libc ++还是libstdc ++?

我正在使用c/c ++为osx和linux开发命令行界面可执行文件.该项目将链接到opencv.我应该使用libc ++还是libstdc ++?

linux macos opencv libstdc++ libc++

79
推荐指数
2
解决办法
5万
查看次数

使用带有clang ++ -stdlib = libc ++的libstdc ++编译库

我在Mac OS X(10.8.2)下使用C++工作,最近我想出了使用C++ 11功能的需求,这些功能可以通过使用libc ++ stdlib的clang ++编译器获得.但是,我还需要使用一些针对libstdc ++编译和链接的遗留库(来自MacPorts).

在这样做时,我得到了链接错误,因为遗留库的标题使用,例如std::string,需要解决std::__1::basic_string(即,libc ++实现std::string)而不是std::basic_string实现.

有没有办法在开发中混合两个库(例如,通过使用一些预处理器标志?)

c++ clang libstdc++ c++11 libc++

68
推荐指数
1
解决办法
2万
查看次数

在哪里可以找到 GLIBCXX_3.4.29?

我将 GCC 编译器从 GIT 存储库更新到版本 11。现在我的测试代码 (GoogleTest/GoogleMock) 抱怨找不到 GLIBCXX_3.4.29。 这不是重复的,请重新打开 发布在: Understanding the gcc version and the GLIBC, GLIBCXX versions in more detail (2 个答案) 中的 答案并没有回答这个问题。

链接器错误是:

/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.29 not found

的输出strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH
Run Code Online (Sandbox Code Playgroud)

在哪里可以找到 3.4.29?

c++ gcc libstdc++

55
推荐指数
4
解决办法
13万
查看次数

将std :: array与初始化列表一起使用

除非我弄错了,否则应该可以通过以下方式创建一个std:array:

std::array<std::string, 2> strings = { "a", "b" };
std::array<std::string, 2> strings({ "a", "b" });
Run Code Online (Sandbox Code Playgroud)

然而,使用GCC 4.6.1我无法使其中任何一个工作.编译器简单地说:

expected primary-expression before ',' token
Run Code Online (Sandbox Code Playgroud)

然而初始化列表与std :: vector一起工作正常.那是哪个呢?我错误地认为std :: array应该接受初始化列表,还是让GNU标准C++库团队搞错了?

c++ libstdc++ c++11

54
推荐指数
2
解决办法
3万
查看次数

什么时候需要使用标志-stdlib = libstdc ++?

什么时候需要使用-stdlib=libstdc++gcc编译时使用编译器和链接器的标志?

编译器是否自动使用libstdc ++?

我在Ubuntu 13.10上使用gcc4.8.2,我想使用c ++ 11标准.我已经传递-std=c++11给了编译器.

c++ gcc std libstdc++ c++11

48
推荐指数
3
解决办法
7万
查看次数

std::vector (ab) 使用自动存储

考虑以下片段:

#include <array>
int main() {
  using huge_type = std::array<char, 20*1024*1024>;
  huge_type t;
}
Run Code Online (Sandbox Code Playgroud)

显然它会在大多数平台上崩溃,因为默认堆栈大小通常小于 20MB。

现在考虑以下代码:

#include <array>
#include <vector>

int main() {
  using huge_type = std::array<char, 20*1024*1024>;
  std::vector<huge_type> v(1);
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是它也崩溃了!回溯(使用最近的 libstdc++ 版本之一)指向include/bits/stl_uninitialized.h文件,我们可以在其中看到以下几行:

typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
std::fill(__first, __last, _ValueType());
Run Code Online (Sandbox Code Playgroud)

调整大小vector构造函数必须默认初始化元素,这就是它的实现方式。显然,_ValueType()临时会导致堆栈崩溃。

问题是它是否是一个符合要求的实现。如果是,那实际上意味着大类型向量的使用非常有限,不是吗?

c++ libstdc++ stdvector language-lawyer automatic-storage

44
推荐指数
3
解决办法
3049
查看次数