草庐IT

android - gcc 在 arm/android 上

我刚拿到一个EEE焊盘变压器。就像我拥有的​​任何硬件一样,我想在上面安装一个C编译器。我知道我可以交叉编译,但我想在设备本身上进行开发。我在谷歌上搜索过,我似乎只能找到有关如何为x86/64Linux构建arm工具链的页面。想法? 最佳答案 构建gcc(等)以在您的目标上运行的过程应该类似于构建交叉编译器,除了您将:需要有一个ARM交叉编译器,可以在您的x86机器上运行。所以你的谷歌搜索结果仍然有用。在为工具链的所有部分运行configure时,使用--host选项指定您的ARM平台。

c++ - 为什么 sizeof(std::mutex)==40 (gcc,clang,icc)?

这个问题在这里已经有了答案:boost::threaddatastructuresizesontheridiculousside?(4个答案)关闭9年前。而不是sizeof(std::atomic)==1?可以通过简单的std::atomic实现互斥锁。,所以我认为互斥锁的大小可以这么小,或者可能是4(32位)。

c++ - GCC 的 TSAN 报告与线程安全静态本地的数据竞争

我写了以下玩具示例:std::mapgetMap(conststd::string&s){std::mapmap;size_ti=0;for(constchar*b=s.data(),*end=b+s.size();b!=end;++b){map[*b]=i++;}returnmap;}voidcheck(conststd::string&s){//ThecreationofthemapshouldbethreadsafeaccordingtotheC++11rules.staticconstautomap=getMap("12abcd12ef");//Nowwecanreadthem

c++ - 如何在Cygwin GCC 4.7.2下使用C++ 11的std::thread

我一直在尝试使用新引入的C++11std::thread功能在Cygwin下编译多线程hello-world程序,但没有成功。我自己编译安装了GCC4.7.2,同样的代码在同版本GCC的Linux下运行没有任何问题。我遇到的第一个错误是编译器无法识别-pthread标志。研究了一段时间后,我注意到有人在Cygwin上说这个标志应该是-lthread。我进行了更改并且错误消失了,但是出现了另一系列错误,告诉我线程不是std的成员。请问是安装时编译器配置错误导致的,还是Cygwin下根本不支持std::thread? 最佳答案 这看起来

c++ - Clang 与 GCC 与 MSVC 中的 SFINAE 和可见性检查——哪个是正确的?

我已经写了我对is_default_constructible的C++03兼容实现的尝试:templatestructis_default_constructible;templatestructis_default_constructible{protected://Putbasetypedefsheretoavoidpollutionstructtwoc{chara,b;};templatestructtest{typedefchartype;};templatestaticTdeclval();};templatestructis_default_constructible::t

c++ - gcc c++ 命令行错误消息解析器

是否有任何程序可以以漂亮的格式解析和显示gcc生成的c++错误消息。我真的在寻找像less这样的东西,我可以将我的错误输入其中,默认情况下会fold模板参数列表,也许有一些很好的突出显示,以便我的错误实际上是可读的。(是的,这是boost的错,我有如此难以理解的错误,以防你想知道) 最佳答案 STLErrorDecryptor(AKASTLFilt)可以帮助解码它们。我的结果喜忧参半。 关于c++-gccc++命令行错误消息解析器,我们在StackOverflow上找到一个类似的问题:

c++ - undefined reference 在 GCC 下使用 LTO 交叉编译静态库

我正在尝试使用GCC4.9.2为Windows(x86_64-w64-mingw32)交叉编译来自Linux(x86_64-pc-linux-gnu)的应用程序。当构建链接到静态库的目标并使用链接时优化时,对于目标使用的库中的所有符号,我从链接器收到undefinedreference错误。例如,从bar.cpp构建bar.aintbar(void){return42;}并与foo.cpp链接externintbar(void);intmain(int,char**){bar();}使用命令行x86_64-w64-mingw32-g++-flto-ofoo.o-cfoo.cppx86_

c++ - 传递引用阻碍 gcc 消除尾调用

参见BlendingTable::create和BlendingTable::print。两者都具有相同形式的尾递归,但create将优化为循环,而print不会并导致堆栈溢出。向下查看修复程序,这是我从一位gcc开发人员关于我关于此问题的错误报告的提示中得到的。#include#include#include#include#includeclassSystem{public:templatestaticvoidprint(constT&t,constTs&...ts){std::coutstaticvoidprintLine(constTs&...ts){print(ts...,'

c++ - 使用 gcc 写入 Unions

考虑以下类型:structA{intx;};structB{inty;charz;};unionU{Aa;Bb;};还有这个代码片段:Uu;new(&u.b)B;b.y=42;b.z='x';此时,从u.a.x读取是明确定义的行为(并将产生42),因为它在公共(public)初始序列中。写入到u.a.x是未定义的行为。但gcc允许通过union进行类型双关——文档明确允许读取非事件成员,而不管成员顺序如何。gcc是否允许写入非事件成员,甚至是常见的初始序列,或者这在gcc上仍然是未定义的行为吗?也就是说,如果此时我有:voidwrite(A&arg){a.x=17;}write(&u.

c++ - GCC:减少输出中的模板名称

在我的C++代码中,我经常使用模板……这可能是轻描淡写的说法。最终结果是类型名称超过4096个字符,至少可以说观看GCC输出是痛苦的。在GDB或Valgrind等多种调试包中,可以要求不对C++类型进行分解。是否有类似的方法可以强制G++输出仅损坏的类型名称,从而减少所有不必要的输出?澄清由于给出的第一个答案,我发现问题并不明确。考虑以下MWE:templateclassA{public:Tfoo;};templateclassB{};templateclassC{public:voidf(void){this->foo=T(1);this->bar=T(2);}};typedefC>