我怎么知道每个gcc版本附带的libstdc ++?有没有一种简单的方法来获取此信息而无需安装gcc?
这是一个已知的错误,moc跳过了libstdc ++中使用的宏,如下所述:http://lists.kde.org/? l = ancessitas-devel&m = 132317657926916&q = raw
我正在尝试编译一个使用gcc 4.6.3的项目,因为moc跳过宏而被卡住了.
克服该问题的一种方法是包含此链接中提到的指令:
http://doc.qt.io/qt-4.8/moc.html
但这是耗时的,而不是一个非常干净的方式,因为每个文件都必须有这些指令.
我想知道的是,是否可以配置qmake以使moc跳过某些目录/文件?
编辑:错别字
我编译了clang 3.6.0(trunk 219085)和g ++ 4.9.1.为了使用权利libstdc++(6.0.20),而不是我系统中的那个,我有这些环境变量:
set -x LD_LIBRARY_PATH /home/remyabel/gcc-4.9.1/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs /usr/local/lib
set -x PATH ~/install/gcc-4.9.1/bin /home/remyabel/llvm/build/Release+Asserts/bin /home/remyabel/llvm/build/Release+Asserts/lib $PATH
Run Code Online (Sandbox Code Playgroud)
以下调用工作:
g++4.9 -std=c++11 test.cpp
g++4.9 -std=c++1y test.cpp
g++4.9 -std=c++14 test.cpp
clang++ -std=c++11 test.cpp
Run Code Online (Sandbox Code Playgroud)
但clang的C++ 14模式不会让它编译:
clang++ -std=c++1y test.cpp
clang++ -std=c++14 test.cpp
Run Code Online (Sandbox Code Playgroud)
我实际上可以在coliru(clang 3.5.0)上重现这个问题,所以我不认为这个问题纯粹是我.
错误消息:
In file included from main.cpp:4:
In file included from /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../../include/c++/4.9.0/regex:58:
In file included from /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../../include/c++/4.9.0/bits/regex.h:2721:
/usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../../include/c++/4.9.0/bits/regex.tcc:632:11: error: member function '_M_end_of_seq' not viable: 'this' argument has type 'const std::regex_token_iterator<__gnu_cxx::__normal_iterator<const …Run Code Online (Sandbox Code Playgroud) 应该std::remove_cv<const int[3]>生产什么类型?int[3]还是const int[3]?
const int[3]是array of 3 const int对的?,没有顶级的cv-qualifier.所以它不应该产生const int[3]吗?int[3]我认为最新版本的gcc/libstdc ++正在制作中.这是一个错误吗?为什么/为什么不呢?
我正在尝试运行appium测试.但是我得到错误说:
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found
Run Code Online (Sandbox Code Playgroud)
我正在使用RedHat6.6.当我跑:
strings /usr/lib/libstdc++.so.6 | grep GLIBC
Run Code Online (Sandbox Code Playgroud)
我明白了:
GLIBC
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
GLIBC_2.0
GLIBC_2.3
GLIBC_2.4
GLIBC_2.1
GLIBC_2.1.3
GLIBC_2.3.2
GLIBC_2.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
Run Code Online (Sandbox Code Playgroud)
是否有可能获得RedHat6.6的GLIBCXX_3.4.15?
给定此版本的stdc ++库(例如GLIBCXX_3.4.17)的GLIBCXX版本,在哪里可以找到指定已实现哪些功能的文档?
还有一种方法,给定SO NAME版本将提供相同的文档.
我正在研究一个嵌入式系统,它有一个现有版本的libstdc ++; 遗憾的是,提供的交叉编译器(g ++)的版本比目标上的stdc ++库支持的版本更高.不能在目标上升级stdc ++库.在我编写很多代码之前,只发现它没有在目标上运行; 我想事先知道什么是支持和不支持.
我发现GNU文档很有用; 但是,我希望有一个文件,其中一个人可以获得已经实现的符号版本和/或SO NAME,我只是错过了它.
在此先感谢您的帮助
我正在尝试在Linux上构建满足以下条件的可执行文件:
我当前的开发环境是CentOS 7上的gcc4.8.5,glibc 2.17.由于对memcpy的依赖,构建的二进制文件在glibc <2.14的系统上不起作用.
objdump -T main | fgrep GLIBC_2.14
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.14 memcpy
Run Code Online (Sandbox Code Playgroud)
在glibc 2.14中引入了memcpy的重大变化,所以我想强制使用旧版本.我在.so文件中遇到了这个stackoverflow post 与旧版符号版本的链接,但是由于与libstdc ++相关的链接器问题,它对我不起作用.这是我尝试下面的解决方案.
main.cpp中
#include <iostream>
#include <string.h>
int main(int argc, char** argv)
{
char source[] = "once upon a midnight dreary...", dest[4];
memcpy(dest, source, sizeof dest);
std::cout << dest << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
wrap_memcpy.cpp
#include <string.h>
__asm__(".symver memcpy, memcpy@GLIBC_2.2.5");
void *__wrap_memcpy(void *dest, const void *src, size_t n)
{
return memcpy(dest, src, …Run Code Online (Sandbox Code Playgroud) 我有一个RHEL服务器(Maipo),我做了安装gcc 7.3(gcc 7.3.0)-发布于2018年1月25日。对于安装gcc,我遵循了如何在CentOS 7.2上使用yum安装gcc 5.3?
但是,当我安装某些软件时(需要gcc> 4.9),我仍然遇到g ++库问题。我以为按指示编译gcc应该提供了正确的库?但我得到:
/lib64/libstdc++.so.6: version CXXABI_1.3.9' not found
/lib64/libstdc++.so.6: versionGLIBCXX_3.4.21' not found
Run Code Online (Sandbox Code Playgroud)
仍然在g ++的4.8.5版本中(libstdc ++。so.6.0.19-这是那里的唯一版本)。我检查了,但没有达到1.3.9和3.4.21。
由于我订阅了RedHat(学术服务器),因此我无法访问开发人员工具包-适用于我的工具包可以追溯到gcc 4.8.5。
如果有人对如何解决这个问题有任何想法,我将非常感谢您的帮助。并道歉,如果听起来很愚蠢。
我正在使用没有is_trivially_constructible类型特征的gcc-4.9.查看libstdc ++源代码(type_traits),这取决于在编译器本身中实现的__is_trivially_constructible.
我想知道是否有可能将这个特性实现为库而不是依赖于编译器,以便我可以在我使用gcc-4.9卡住的项目中使用它.
考虑在Centos 7虚拟机或容器中构建和发布C++项目时的情况.默认gcc为Centos 7是4.8.为了允许开发人员使用现代C++,最新版本gcc(例如6.3)安装在作为CI服务器运行的Centos 7中.这提供了-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
...
Run Code Online (Sandbox Code Playgroud)
这是编译和链接命令的简短示例:
[ 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 …Run Code Online (Sandbox Code Playgroud)