草庐IT

gcc-toolchain

全部标签

c++ - GCC 向依赖默认构造函数的模板化类中的静态数据成员给出 "undefined reference"错误

我遇到了类似的问题:"undefinedreference"tostaticfieldtemplatespecialization但他们使用的解决方法对我不起作用。我有一个带有静态数据成员的CRTP类,其中之一是std::mutex。不幸的是,GCC(4.8.2)的链接器给我这个互斥锁的“undefinedreference”错误。Clang(3.4)没有。有解决方法吗?最初的问题(上面链接)在静态数据成员上调用了复制构造函数,迫使GCC发出一个符号,但是由于我的数据成员是std::mutex,所以这不是一个选项——复制构造函数被删除,并且有没有参数构造函数。我只是被冲洗了吗?我认为问

c++ - 是否有可能从 gcc 或 clang 获得 Lexer 输出?

是否可以让clang或gcc显示词法分析阶段的结果? 最佳答案 虽然解析器doespollthelexer如果没有适当的“词法分析阶段”,这并不意味着您不能在词法分析时转储token。这是通过命令完成的:clang-fsyntax-only-Xclang-dump-tokenscode.c 关于c++-是否有可能从gcc或clang获得Lexer输出?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

c++ - GCC Address Sanitizer - 将库函数列入黑名单(特别是 boost::test)

我所有的单元测试代码都基于boost::test。我刚刚尝试了GCCAddresssanitizer,它报告了boost::test的一些问题:==25309==ERROR:AddressSanitizer:heap-use-after-freeonaddress0xf5801344atpc0x8259412bp0xff9966c8sp0xff9966bcREADofsize4at0xf5801344threadT0#00x8259411inboost::unit_test::framework::run(unsignedlong,bool)../common/lib/boost/bo

c++ - 为派生类专门化 std::hash 在 gcc 中工作,而不是 clang

我正在尝试为派生类专门化std::hash。目前最好的方法是基于thisanswer:#include#include#includenamespacefoo{templateusingfirst=T;structhashable{};structbar:publichashable{};}namespacestd{templatestructhash::value>>>{size_toperator()(constT&x)const{return13;}};}intmain(){std::unordered_setbaz;return0;}使用g++5.2.0编译时没有警告(-Wal

c++ - 强制使用预定义宏的 gcc 标志

我的问题如下。我正在尝试为mips构建一个项目。当我从它的存储库下载它时,构建它没有问题,但是当我将它作为一个更大项目的一部分构建它时,我收到以下错误:error:expected‘,’or‘...’beforenumericconstant我发现这是一个问题,因为某些变量称为mips,而同一变量在gcc编译器中被定义为预定义宏。#definemips1我验证了它:mipsel-linux-gnu-g++-dM-E-所以,我的问题是,是否有人知道是否有特定的编译器标志或其他什么强制使用此宏?奇怪的是,当我从存储库下载相同的代码时没有构建问题。这两个项目都是使用相同的工具链构建的,我已经

c++ - 使用 GCC 导出 C++ 类的符号

我正在使用dlopen合并动态加载库及其宿主的符号,在宿主中我有一个类:classFoo{public:Foo(){/*...*/}voidbar(){/*...*/}};intmain(){//Foofoo;return0;}我正在使用g++-Wl,--export-dynamic-otesttest.cpp编译它并使用nm-gtest检查符号。我希望符号_ZN3FooC1Ev和_ZN3FooC2Ev存在于可执行文件中,因为动态库需要它们,但除非我通过取消注释上面的行来使用它们,否则它们不会出现.我相信它正在被优化掉,因为GCC认为不需要它。如何强制将Foo的构造函数和方法包含在主机

c++ - 未定义对 clang 中函数指针的变量模板的引用,但不是 gcc

#includestaticconstexprboolisSSE2=true;templatestaticvoid(*fp)();templatestaticvoidfoo_c(){std::coutstaticvoidfoo_sse2(){std::cout=foo_sse2;elsefp=foo_c;fp();return0;}我有一个使用变量模板的项目,它本身就是一个指向函数的指针。上面的示例代码在GCC6.3中编译和执行良好,但在clang3.9.1中给出警告和错误。$clang++"Source.cpp"-o"foo.exe"-std=c++14-O2Source.cpp:6

c++ - 具有未触及的非 constexpr 参数 : Who is correct, clang 或 gcc 的 constexpr?

我有4个测试用例,我相信它们都是有效的:constexprintf(intconst&/*unused*/){return1;}voidg(intconst&p){constexprinta=f(p);//clangerror,gccvalidintv=0;constexprintb=f(v);//clangvalid,gccvalidintconst&r=v;constexprintc=f(r);//clangerror,gccerrorintn=p;constexprintd=f(n);//clangvalid,gccvalid}intmain(){intp=0;g(p);}Cla

c++ - flto 与 gcc7.2 崩溃

我在以下代码文件中遇到getline崩溃。我构建了gcc7.2,因为系统更新不可用。最小的例子:#includeintmain(intargc,char*argv[]){std::stringline;while(std::getline(std::cin,line)){}return0;}下面几行GCC_INSTALL_DIR代表我自己的gcc安装目录输出:./a.outa***Errorin`./a.out':free():invalidpointer:0x0000000000602200***=======Backtrace:=========/lib64/libc.so.6(+

c++ - 生成具有完整路径的 gcc 依赖项

我有一个看起来像这样的简单项目.├──build│  ├──file1.o│  └──one│  ├──file1.o│  └──file2.o├──.depend├──Makefile└──src  ├──file1.cpp  └──one  ├──file1.cpp  └──file2.cppMakefile是这样的:#GetallofthesourcefilesSRC=$(shellfindsrc/-name"*.cpp")#GetalloftheobjectfilesOBJ=$(substsrc,build,$(SRC:.cpp=.o))$(OBJ):@mkdir-p$(she