草庐IT

c++ - gcc 链接器描述文件强制符号位于特定地址

我有一个关于gcc链接器描述文件的非常具体的问题。我有一个嵌入式项目,必须确保主符号或主符号的地址存在于特定地址(Elf文件)。原因是,我有一个带有引导加载程序的微Controller。此引导加载程序应在引导后调用主例程。出于这个原因,我必须提供引导后跳转到的地址。有没有办法使用链接器描述文件来强制符号始终位于表的顶部或输入地址,或者我什至可以通过某种方式获取符号的地址并将其写回特定位置?提前致谢。 最佳答案 当然有办法。您最好的选择是只为您的功能使用一个部分:intstart(void)__attribute__((section

c++ - 使用 GCC,我可以在每个函数的基础上禁用 -Wframe-larger-than 吗?

使用GCC,是否可以指定一组免于-Wframe-larger-than的函数?(例如,主要。) 最佳答案 GCC为此目的向您提供编译指示:http://gcc.gnu.org/onlinedocs/gcc-4.5.2/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas目前它不会完全按照您的要求执行,因为它似乎是逐个文件执行的,但在gcc的下一个版本(4.6)中,它看起来好像是上下文感知的:http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas

c++ - 使用 gcc 原子内置函数的原子交换函数

这是通用原子交换函数的正确实现吗?我正在GCC上寻找与C++03兼容的解决方案。templatevoidatomic_swap(T&a,T&b){static_assert(sizeof(T)如果不是,我应该怎么做才能修复它?此外:__sync_lock_release是否总是必需的?在搜索其他代码库时,我发现这通常不会被调用。没有发布调用,我的代码如下所示:templatevoidatomic_swap(T&a,T&b){static_assert(sizeof(T)附言:AtomicswapinGNUC++是一个类似的问题,但它没有回答我的问题,因为提供的答案需要C++11的std

c++ - 将 std::unique_ptr 与 lambda 交换为删除器——GCC

我们可以使用lambda作为带有std::unique_ptr的删除器吗?实际上,我是用clang++做的,它很高兴这样做。我正在使用std::swap换成std::unique_ptr;其中autodeleter=[](structaddrinfo*ptr){if(ptr!=nullptr){freeaddrinfo(ptr);}};.Clang的交换似乎不需要复制赋值运算符,但gcc的std::swap需要,正如您在这些日志中看到的那样:Infileincludedfrom/usr/include/c++/4.8.1/memory:81:0,from/home/zenol/proj

c++ - 函数模板 : clang rejects, gcc 接受的从属名称查找

考虑以下片段:structX{};namespacefoo{templatevoidbar(){T{}();}clang拒绝此代码,gcc接受它。这是gcc错误还是clang错误? 最佳答案 我相信这是一个gcc错误,归档为70099.来自[temp.dep.res]:Inresolvingdependentnames,namesfromthefollowingsourcesareconsidered:(1.1)—Declarationsthatarevisibleatthepointofdefinitionofthetemplat

c++ - "Debug"版 GCC 中 std::array 的绑定(bind)检查

编程时C++11std::array的优点已由专家解释,但我想从编译器那里得到一件事。能够在编译使用[]的代码时使用.at()时默认打开范围检查。它可能有助于检查范围违规,尤其是对于多维数组,因为在这种情况下,范围违规导致段错误的可能性较小(因为您通常在内部数组周围拥有内存,所以[5000][-123]仍可能指向您拥有的内存)。所以我想知道是否有一个开关可以编译成检查范围的机器代码:constuint32_tdim1=10*1000,dim2=3;std::array,dim1>test_2Darray;intundefined_value=test_2Darray[dim2-1][d

c++ - 了解使用 GCC 时编译时间花在哪里

我有一个大量使用模板的项目。最近编译时间涨的挺猛的。我想知道是否有一种方法可以查看g++编译哪些类/行需要最多的时间。这是-ftime-report的一些输出:Executiontimes(seconds)TOTAL:0.300.050.379119kBExecutiontimes(seconds)garbagecollection:0.91(6%)usr0.00(0%)sys0.92(5%)wall0kB(0%)ggccallgraphconstruction:0.23(2%)usr0.11(3%)sys0.37(2%)wall10652kB(1%)ggccallgraphoptim

c++ - GCC 中的 "empty base optimization"是否可配置?

考虑这些类型:structA{};structB:A{inti;};sizeof(A)>0按照标准要求。由于空基优化,sizeof(B)应为4。然而在GCC4.1.1上它是5(我在这个区域使用一包1)。并且不一致-我的一些文件得到了它,有些没有。还不能确定有什么区别,我们有一个很大的项目。在我使用的其他三个编译器(Microsoft和Freescale)上,我没有这个问题。根据thisarticle,空基优化显然是可选的.在GCC4.1.1中是否有编译器选项或pragma来调整它?我可以解决这个问题,但我想先了解发生了什么。我用Google搜索了一段时间,似乎找不到任何东西。

c++ - "Invalid template argument"错误在 Visual Studio 但不是 GCC

假设你有代码templateclassBaseType>classEST16:publicBaseType{public:EST16(doubled){}};templateclassSCEST{Ty;};typedefEST16EST16_SC;classChild:publicEST16_SC{public:Child():EST16_SC(1.0){}};classNotWorkingChild:publicEST16{public:NotWorkingChild():EST16(1.0){}};TEST(TemplateTest,TestInstantiate){Childch

c++ - 用 gcc 编译 std::regex_iterator

我可以使用g++-ctest.cpp-std=c++0x创建.o文件,但无法链接它,出现下一个错误:test.cpp:(.text+0xe5):undefinedreferenceto`std::regex_iterator>::regex_iterator(charconst*,charconst*,std::basic_regex>const&,std::bitset)'test.cpp:(.text+0xf1):undefinedreferenceto`std::regex_iterator>::regex_iterator()'代码:#include#include#inclu