Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;使用现代编译器编译的项目,但链接到过时的libstdc++; 考虑当C++项目被构建并在 CENTOS 7 虚拟机或容器中进行的情况。Centos 7的默认gcc为4.8。为了允许开发人员使用现代C++,在CITS服务器的CITOS 7中安装了更新近的版本:代码> GCC < /C>(例如,代码> 6.3)。这提供了-std=c++14支持 [builder@f7279ae9f33f build (master %)]$ /usr/bin/c++ -v 2>&1 | grep version gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) [builder@f7279ae9f33f build (master %)]$ /opt/rh/devtoolset-6/root/usr/bin/c++ -v 2>&1 | grep version gcc version 6.3.1 20170216 (Red Hat 6.3.1-3) (GCC) export CXX=/opt/rh/devtoolset-6/root/usr/bin/c++ make all -j4 ..._C++_Gcc_Libstdc++_Devtoolset - Fatal编程技术网

C++;使用现代编译器编译的项目,但链接到过时的libstdc++; 考虑当C++项目被构建并在 CENTOS 7 虚拟机或容器中进行的情况。Centos 7的默认gcc为4.8。为了允许开发人员使用现代C++,在CITS服务器的CITOS 7中安装了更新近的版本:代码> GCC < /C>(例如,代码> 6.3)。这提供了-std=c++14支持 [builder@f7279ae9f33f build (master %)]$ /usr/bin/c++ -v 2>&1 | grep version gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) [builder@f7279ae9f33f build (master %)]$ /opt/rh/devtoolset-6/root/usr/bin/c++ -v 2>&1 | grep version gcc version 6.3.1 20170216 (Red Hat 6.3.1-3) (GCC) export CXX=/opt/rh/devtoolset-6/root/usr/bin/c++ make all -j4 ...

C++;使用现代编译器编译的项目,但链接到过时的libstdc++; 考虑当C++项目被构建并在 CENTOS 7 虚拟机或容器中进行的情况。Centos 7的默认gcc为4.8。为了允许开发人员使用现代C++,在CITS服务器的CITOS 7中安装了更新近的版本:代码> GCC < /C>(例如,代码> 6.3)。这提供了-std=c++14支持 [builder@f7279ae9f33f build (master %)]$ /usr/bin/c++ -v 2>&1 | grep version gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) [builder@f7279ae9f33f build (master %)]$ /opt/rh/devtoolset-6/root/usr/bin/c++ -v 2>&1 | grep version gcc version 6.3.1 20170216 (Red Hat 6.3.1-3) (GCC) export CXX=/opt/rh/devtoolset-6/root/usr/bin/c++ make all -j4 ...,c++,gcc,libstdc++,devtoolset,C++,Gcc,Libstdc++,Devtoolset,这是编译和链接命令的简短示例: [ 78%] Building CXX object CMakeFiles/ucsdos.dir/src/merge_operator_string.cpp.o /opt/rh/devtoolset-6/root/usr/bin/c++ -Ducsdos_EXPORTS -I/home/builder/src/dos/libucsdos/./src -I/home/builder/src/dos/libucsdos/./include -I/home/build

这是编译和链接命令的简短示例:

[ 78%] Building CXX object CMakeFiles/ucsdos.dir/src/merge_operator_string.cpp.o
/opt/rh/devtoolset-6/root/usr/bin/c++  -Ducsdos_EXPORTS -I/home/builder/src/dos/libucsdos/./src -I/home/builder/src/dos/libucsdos/./include -I/home/builder/src/dos/libucsdos/build/schema/cpp -I/home/builder/src/dos/libucsdos/build/schema -isystem /usr/local/include  -O2 -g -DNDEBUG -fPIC   -frtti -pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default -Wundef -Werror -Wno-unused -std=gnu++14 -o CMakeFiles/ucsdos.dir/src/merge_operator_string.cpp.o -c /home/builder/src/dos/libucsdos/src/merge_operator_string.cpp

[ 80%] Linking CXX shared library libucsdos.so
/usr/bin/cmake3 -E cmake_link_script CMakeFiles/ucsdos.dir/link.txt --verbose=1
/opt/rh/devtoolset-6/root/usr/bin/c++ -fPIC -O2 -g -DNDEBUG  -shared -Wl,-soname,libucsdos.so.0 -o libucsdos.so.0.3.23 CMakeFiles/ucsdos.dir/src/c.cpp.o CMakeFiles/ucsdos.dir/src/crdt_2p_set.cpp.o CMakeFiles/ucsdos.dir/src/crdt_pn_counter.cpp.o CMakeFiles/ucsdos.dir/src/errors.cpp.o CMakeFiles/ucsdos.dir/src/merge_index_document.cpp.o CMakeFiles/ucsdos.dir/src/merge_index_segment.cpp.o CMakeFiles/ucsdos.dir/src/merge_operator_string.cpp.o -Wl,-rpath,/usr/local/lib: schema/libschema.a /usr/lib64/librocksdb.so /usr/lib64/libjemalloc.so /usr/local/lib/libgrpc++_reflection.so /usr/local/lib/libgrpc++.so /usr/local/lib/libgrpc.so -ldl -lgrpc++ /usr/lib64/libprotobuf.so -lpthread /usr/lib64/libprotobuf-lite.so 
无论如何,生成的工件似乎与系统默认版本的
libstdc++
相链接:

[builder@f7279ae9f33f build (master %)]$ ldd libucsdos.so | grep libstdc++.so.6
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f2a4a054000)
很容易发现
/lib64/libstdc++。因此.6
版本是
4.8.5

[builder@f7279ae9f33f build (master %)]$ yum whatprovides "/lib64/libstdc++.so.6"
libstdc++-4.8.5-28.el7_5.1.x86_64 : GNU Standard C++ Library
Repo        : @Updates
Matched from:
Filename    : /lib64/libstdc++.so.6
此生成环境配置有效吗

无论如何,生成的工件似乎与libstdc++的系统默认版本相链接:

对。
devtoolset-6-gcc-c++
包提供了一个自定义版本的gcc,它使用一个特殊的链接器脚本,而不是
libstdc++.so的动态库。这意味着它生成的二进制文件不依赖于较新的
libstdc++.so.6,并且可以在未安装devtoolset的其他CentOS计算机上运行(即,它们只有GCC 4.8中较旧的libstdc++库)

此生成环境配置有效吗

对。你所看到的是完全正常的,以及它应该如何工作

< >从GCC 4.4.0更新的C++运行时的片段静态链接到二进制,在运行时只依赖于旧的代码> LBSTDC+++。因此,每个CITOS系统已经安装了。 这就是GCC的devtoolset版本的全部要点

无论如何,生成的工件似乎与libstdc++的系统默认版本相链接:

对。
devtoolset-6-gcc-c++
包提供了一个自定义版本的gcc,它使用一个特殊的链接器脚本,而不是
libstdc++.so的动态库。这意味着它生成的二进制文件不依赖于较新的
libstdc++.so.6,并且可以在未安装devtoolset的其他CentOS计算机上运行(即,它们只有GCC 4.8中较旧的libstdc++库)

此生成环境配置有效吗

对。你所看到的是完全正常的,以及它应该如何工作

< >从GCC 4.4.0更新的C++运行时的片段静态链接到二进制,在运行时只依赖于旧的代码> LBSTDC+++。因此,每个CITOS系统已经安装了。
这就是GCC devtoolset版本的全部要点。

您是在使用旧版本libstdc++的头文件还是新版本的头文件?@FireLancer我不包括libstdc++头文件,我认为编译器应该隐式地完成它(更新了问题)。看起来像是的变体。您是使用旧的libstdc++还是新的libstdc++的头?@FireLancer我不包括libstdc++头,我认为编译器应该隐式地执行它(更新了问题)。看起来像的变体