标签: libstdc++

如何在 Ubuntu 20.04 上安装 libstdc++6 调试符号?

例如,采用以下最小示例:

#include <cstdio>
#include <stdexcept>

int main(int argc, char* argv[]){
#ifdef __GLIBCPP__
    std::printf("GLIBCPP: %d\n",__GLIBCPP__);
#endif
#ifdef __GLIBCXX__
    std::printf("GLIBCXX: %d\n",__GLIBCXX__);
#endif
    throw std::runtime_error("Were are libstdc++.so.6 debug symbols?");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当在 my 中运行它时gdb,它不显示以下调试符号libstdc++.so.6

$ g++ -o testmain test.cpp -ggdb --std=c++98 && gdb ./testmain
GNU gdb (Ubuntu 9.1-0ubuntu1) 9.1
Copyright (C) 2020 Free Software Foundation, Inc.
...
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./testmain...
(gdb) r
Starting …
Run Code Online (Sandbox Code Playgroud)

c++ linux ubuntu gdb libstdc++

4
推荐指数
1
解决办法
9586
查看次数

如何在GCC trunk中使用&lt;stacktrace&gt;?

https://github.com/gcc-mirror/gcc/commit/3acb929cc0beb79e6f4005eb22ee88b45e1cbc1d提交来看,C++ 标准头<stacktrace>存在诸如此类的东西,std::stacktrace_entry但没有声明,因为_GLIBCXX_HAVE_STACKTRACE也没有定义。

我已经在https://godbolt.org/z/b9TvEMYnh上尝试过,但是一旦我添加了参数,就会发出链接器错误-lstd++_libbacktrace(ofc,未找到)

#include <stacktrace> // header found

int main() {
  // can't use features like 'std::stacktrace_entry' and 'std::stacktrace'
}
Run Code Online (Sandbox Code Playgroud)

从提交描述来看,这条消息意味着什么?:

目前,只有使用 --enable-libstdcxx-backtrace=yes 时才会构建新库。

c++ libstdc++ compiler-explorer c++23

4
推荐指数
1
解决办法
1782
查看次数

未找到 GLIBCXX_3.4.29

我正在尝试将 mujuco 安装到我的 Linux 笔记本电脑上,一切正常,直到我尝试将其导入 python 文件。当我尝试导入它/运行已经包含 mujuco 的 python 脚本时,出现以下错误:

Import error. Trying to rebuild mujoco_py.

running build_ext

building 'mujoco_py.cymj' extension

gcc -pthread -B /home/daniel/miniconda3/envs/mujoco_py/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/daniel/.mujoco/mujoco-py/mujoco_py -I/home/daniel/.mujoco/mujoco210/include -I/home/daniel/miniconda3/envs/mujoco_py/lib/python3.8/site-packages/numpy/core/include -I/home/daniel/miniconda3/envs/mujoco_py/include/python3.8 -c /home/daniel/.mujoco/mujoco-py/mujoco_py/cymj.c -o /home/daniel/.mujoco/mujoco-py/mujoco_py/generated/_pyxbld_2.1.2.14_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/daniel/.mujoco/mujoco-py/mujoco_py/cymj.o -fopenmp -w

gcc -pthread -B /home/daniel/miniconda3/envs/mujoco_py/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/daniel/.mujoco/mujoco-py/mujoco_py -I/home/daniel/.mujoco/mujoco210/include -I/home/daniel/miniconda3/envs/mujoco_py/lib/python3.8/site-packages/numpy/core/include -I/home/daniel/miniconda3/envs/mujoco_py/include/python3.8 -c /home/daniel/.mujoco/mujoco-py/mujoco_py/gl/osmesashim.c -o /home/daniel/.mujoco/mujoco-py/mujoco_py/generated/_pyxbld_2.1.2.14_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/daniel/.mujoco/mujoco-py/mujoco_py/gl/osmesashim.o -fopenmp -w
gcc -pthread -shared -B /home/daniel/miniconda3/envs/mujoco_py/compiler_compat -L/home/daniel/miniconda3/envs/mujoco_py/lib -Wl,-rpath=/home/daniel/miniconda3/envs/mujoco_py/lib -Wl,--no-as-needed -Wl,--sysroot=/ /home/daniel/.mujoco/mujoco-py/mujoco_py/generated/_pyxbld_2.1.2.14_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/daniel/.mujoco/mujoco-py/mujoco_py/cymj.o /home/daniel/.mujoco/mujoco-py/mujoco_py/generated/_pyxbld_2.1.2.14_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/daniel/.mujoco/mujoco-py/mujoco_py/gl/osmesashim.o -L/home/daniel/.mujoco/mujoco210/bin -Wl,-R/home/daniel/.mujoco/mujoco210/bin -lmujoco210 …
Run Code Online (Sandbox Code Playgroud)

c++ python gcc libstdc++

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

libstdc++ 的 std::thread::id 构造函数都符合标准吗?

cppreference表示std::thread::id只有 1 个构造函数。 libstdc++包含以下附加公共构造函数:

  explicit id(native_handle_type __id) : _M_thread(__id) { }
Run Code Online (Sandbox Code Playgroud)

'cppreference' 是否已过时,或者此构造函数不是标准的一部分?如果它不是标准的一部分,那么为什么它会被公开,因为它std::thread是 的朋友std::thread::id

c++ libstdc++

4
推荐指数
1
解决办法
88
查看次数

公共基类打破了元组的空基类优化

gcc 4.7.1对元组进行空基类优化,我认为这是一个非常有用的功能.但是,似乎有一个意外的限制:

#include <tuple>
#include <cstdint>
#include <type_traits>
class A { };
class B : public A { std::uint32_t v_; };
class C : public A { };
static_assert(sizeof(B) == 4,                "A has 32 bits.");
static_assert(std::is_empty<C>::value,       "B is empty.");
static_assert(sizeof(std::tuple<B, C>) == 4, "C should be 32 bits.");
Run Code Online (Sandbox Code Playgroud)

在这种情况下,最后一个断言失败,因为元组实际上大于4个字节.有没有办法避免这种情况,而不打破类层次结构?或者我是否必须实现我自己的对实现,以其他方式优化这种情况?

c++ gcc libstdc++ c++11 stdtuple

3
推荐指数
1
解决办法
746
查看次数

std :: istream运算符异常重置/不抛出

我不确定如何std::istream::exception 根据标准使用,std::istream::operator>>如果无法将输入读入变量,则抛出异常,例如double.以下代码与clang/libc ++和gcc/libstdc ++有不同的行为:

#include <iostream>
#include <cassert>

int main () {
    double foo,bar;
    std::istream& is = std::cin;

    is.exceptions(std::istream::failbit);
    is >> foo; //throws exception as expected with gcc/libstdc++ with input "ASD"
    std::cout << foo;
    is >> bar;
    std::cout << bar;
    assert(is); //failed with clang/libc++ after input "ASD"

    std::cout << foo << " " << bar << std::endl;

}
Run Code Online (Sandbox Code Playgroud)

根据C++标准,是否is.exceptions(std::istream::failbit);适合operator>>抛出目的?

c++ libstdc++ c++-standard-library libc++

3
推荐指数
1
解决办法
660
查看次数

OpenCV:使用imwrite()函数时无法编译

在我简单的第一个OpenCV应用程序中,我想保存由cam获取的帧,所以我正在使用imwrite()教程说.问题是,我无法编译因为我收到此错误:

Undefined symbols for architecture x86_64:
"cv::imwrite(cv::String const&, cv::_InputArray const&, std::vector<int,  std::allocator<int> > const&)", referenced from:
_main in video-87ad7a.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

在SO中阅读一些帖子我发现它是一个关于使用的C++标准库的问题,所以我添加了标志libstdc++但是以下内容:

g++ -stdlib=libstdc++ -I/usr/local/include -L/usr/local/lib/ -g -o binary video.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_stitching -lopencv_videoio -lopencv_videostab
Run Code Online (Sandbox Code Playgroud)

还没有解决问题.我该怎么办?

更新 似乎是解决方案.我不知道我失踪的该死的旗帜是什么

c++ linker opencv compilation libstdc++

3
推荐指数
1
解决办法
4915
查看次数

我如何以编程方式确定我的C++运行时库的位置?

我正在使用"hax"在CentOS 6上使用GCC 4.8构建C++ 11,然后在任意CentOS 6目标上进行部署(任何C++相关的开箱即用的内容都将构建为带有GCC 4.3的C++ 03)(参考).

为了使这项工作,我将运送我的所有第三方库以及g ++运行时和rpath我的可执行文件,以便确保在适当的位置找到新的库.对于运行时,根据我的统计,我需要运送libstdc++libgcc_s.但我需要知道它们在我的构建系统中的位置,以便我可以打包它们.

有没有一些简洁的方法,我可以从我的包装脚本中查询他们的位置?

(如果最好的方法太笨拙我只会静态地链接它们,但我想避免这种情况,因为我的项目包括几个可执行文件.如果我要静态链接所有我认为我冒风险GPL我的整个项目,例如通过我的C++ MySQL包装器lib静态链接MySQL C API.我想,可以做两者的混合,虽然一些消息来源警告这个 ......)

对于加分,我需要什么添加到这个列表,出libssl,libcrypto,libm,libpthread,libc,librt,libzld-linux-x86-64

c++ gcc libstdc++

3
推荐指数
1
解决办法
637
查看次数

使用CUDA 8.0和GCC 6.x - 错误的功能超载投诉

我正在尝试使用GCC 6.2.1构建一些CUDA代码,这是我的发行版的默认编译器(注意:不是CUDA正式支持的GCC版本,所以你可以称之为实验).这是使用GCC 4.9.3和CUDA版本7.5和8.0构建的代码.

好吧,如果我构建以下(接近)最小的示例:

#include <tuple>

int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)

使用命令行

nvcc -std=c++11 -Wno-deprecated-gpu-targets -o main main.cu
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

/usr/local/cuda/bin/../targets/x86_64-linux/include/math_functions.h(8897): error: cannot overload functions distinguished by return type alone

/usr/local/cuda/bin/../targets/x86_64-linux/include/math_functions.h(8901): error: cannot overload functions distinguished by return type alone

2 errors detected in the compilation of "/tmp/tmpxft_000071fe_00000000-9_b.cpp1.ii".
Run Code Online (Sandbox Code Playgroud)

这是为什么?我该如何纠正/规避这个?

compatibility cuda g++ libstdc++ gcc6

3
推荐指数
1
解决办法
4099
查看次数

G ++不允许我定义名为"major"的成员函数

所以,今天我编写了一些单元测试,突然G ++给了我一个关于GNU C和我的一个成员函数的意外警告major.为什么我不能在major没有触发G ++的情况下命名成员函数?

这是一个最低限度可行的测试片段:

// Any of these includes trigger the warnings
#include <random>
#include <cstdlib>

class my_class {
public:
    void major() const;
};

inline void my_class::major() const {}

int main(void) {
    my_class my_obj;
    my_obj.major();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是编译的输出(使用g++ --std=c++14 -o test-gcc-major test-gcc-major.cpp):

[flisboac@sonic ~]$ uname -a && lsb_release -a && g++ -v && g++ --std=c++14 -o test-gcc-major test-gcc-major.cpp && ./test-gcc-major 
Linux sonic 4.12.10-1-ARCH #1 SMP PREEMPT Wed Aug 30 12:18:42 CEST 2017 …
Run Code Online (Sandbox Code Playgroud)

c++ g++ libc libstdc++ gcc-warning

3
推荐指数
1
解决办法
211
查看次数