草庐IT

gcc-plugin

全部标签

c++ - 在 MinGW/MSYS 上编译 GCC 4.x.x 失败

在过去一周左右的时间里,我一直在尝试编译任何GCC4系列编译器,以便在GCC版本附带的MinGW5.1.6/MSYS1.0.11(均来自Sourceforge.org的自动安装程序)中运行3.4.5.最终目标是安装GCC4.5,但我无法构建任何4.x.x编译器。我已将其缩小为一系列构建指令,这些指令会导致某些异常行为。编译器执行:build/genmodes.exe>tmp-modes.c/bin/sh../../gcc-4.2.4/gcc/../move-if-changetmp-modes.cinsn-modes.cechotimestamp>s-modesgcc-c-g-fkee

c++ - 有什么方法可以使用 GCC 的 __thread 完全模拟 thread_local 吗?

C++11标准包含一个新的附加项——thread_local说明符——它使静态变量成为线程局部的。标准的thread_local支持非平凡的类型——那些具有构造函数和析构函数的类型。遗憾的是,GCC通过作为扩展提供的__thread说明符仅支持普通类型。有没有办法在__thread之上模拟thread_local?__thread的实现非常快(相当于常规变量加两个间接寻址),所以我想避免热路径中的库函数。我正在使用GCC和Linux。不需要便携性。 最佳答案 没有。gcc目前没有能力在线程创建/销毁时为__thread东西运行cto

c++ - 如何在 clang(或 gcc)中删除 C++ 名称?

我正在尝试为clang编写一个快速而肮脏的demangler。我找到了pieceofcode它使用abi::__cxa_demangle,但我不知道它需要哪个header。显而易见的选择是ABI.h但是:demangle.cpp:2:10:fatalerror:'ABI.h'filenotfound#include^使用abi::__cxa_demangle需要什么? 最佳答案 包括cxxabi.h。在Ubuntu13中,此header位于/usr/include/c++/4.x中,其中x是次要gcc版本。

c++ - 宏使用 GCC 编译但不使用 VS11

我编写了以下代码来帮助将我的模板函数限制为某些类型,并在使用其他类型时显示有意义的错误消息。我从stackoverflow中的另一个问题中得到了这个想法,我仍然无法对此发表评论,因为我是新来的。该宏在linuxGCC下可以完美编译,但不能在VisualStudio2012下编译。#include#include#include#include#include#defineISALLOWED(DerivedT)(std::is_same::value)||(std::is_base_of::value)#defineFE_1(WHAT,X)WHAT(X)#defineFE_2(WHAT,

c++ - 全局函数和不明确的参数 NULL 与 char* 在 vs 2013 和 GCC 之间

我试图了解当前C++14标准关于解决模糊函数调用的内容,主要是因为我看到GCC4.9.1和VisualStudio2013更新3之间的差异这是代码(MS和GCC完全相同):#includeusingnamespacestd;voidf(char*str,intchars){coutVisualStudio使用默认vs标志调用f(char*,int)GCC给了我一个编译器错误:重载'f(char*&,NULL)'的调用不明确。gcc仅使用-std=c++11标志。 最佳答案 这取决于NULL的定义。MSVC将其定义为0,因此int重载

c++ - 不鼓励使用 GCC

header保护在几乎所有C++程序中都是必需的,但在严格执行命名约定时会很痛苦——尤其是在重构过程中。当使用GCC(和许多其他编译器)时,我们在预处理器命令#pragmaonce中有一个替代方案。我看到的反对使用此命令的建议(例如,在v3.4之前缺乏支持)对于我的个人项目来说并不是很有说服力。如果可能,我想使用#pragmaonce。综上所述,这句话来自theGCCwebsite让我暂停:Notethatingeneralwedonotrecommendtheuseofpragmas;SeeFunctionAttributes,forfurtherexplanation.也许这只是我

c++ - sscanf 中 uint16_t 的正确且可移植的 (Clang/GCC) 修饰符是什么?

当我尝试编译这段代码时收到一条警告消息sscanf(value,"%h"PRIu16"B",&packet_size)使用Clang600.0.57(OSX)。warning:formatspecifiestype'unsignedchar*'buttheargumenthastype'uint16_t*'(aka'unsignedshort*')[-Wformat]if(sscanf(value,"%h"PRIu16"B",&packet_size)==1){~~~~^~~~~~~~~~~~但是如果我删除修饰符“h”,那么我会在GCC4.8.3(ScientificLinux7)中收

c++ - 为什么下面的代码不能用 gcc 编译但用 clang 编译得很好

下面的代码可以用clang编译,但不能用gcc编译,请问这是gcc中的错误吗?它只是一个包含unique_ptrvector和std::function作为成员的类,当我创建此类的vector时,我不能对此说保留或调整大小。push_back与std::move一起工作正常,而这只发生在gcc而不是clang上。#include#include#include#include#include#includeusingnamespacestd;classABC{public:ABC(){}private:std::vector>up;std::functionfunc;};intmain

c++ - 你能初始化 unique_ptr 的 "static const vectors"吗? (C++17 与 GCC 7.3)

我正在尝试创建一个staticconst默认对象(规则)的列表太大而不能经常复制,因此我想将它们存储在vector中的unique_ptr.我注意到类似的问题已经进行了几次,但我不清楚这是否真的可行(我倾向于不可行)。即你不能使用initializer_list与unique_ptr因为对成员的访问是const导致复制操作。您不能通过引用传递临时变量,从而导致复制操作。因此两者:staticconststd::vector>kStrings={std::unique_ptr(newstd::string("String1")),std::unique_ptr(newstd::strin

c++ - 为什么 clang++ 和 gcc/g++ 生成不同链接的可执行文件

当使用g++和clang++进行编译和链接时,期望生成的可执行文件的链接与它们的链接相同。然而,在某些情况下,尽管传入的参数相同,但clang++可执行文件似乎链接到比g++更多的库。这会导致功能差异,尤其是对于在加载和卸载时自动执行的动态链接库。为什么会这样? 最佳答案 事实证明,gcc在ubuntu--as-needed中默认启用了一项功能,这会导致gcc有效地忽略任何在链接项链中未引用其符号的库这可以在gcc中使用--no-as-needed标志禁用。或者,您可以发出-Wl,--as-needed作为clang++的第一个选项