我正在尝试减小我的elf可执行文件的大小。我正在使用-ffunction-sections-fdata-sections进行编译并使用-gc-sections进行链接,但它出现了一些符号我相信未使用的不会被丢弃。我可以运行GNU工具链中的一些命令来查明正在使用哪些符号以及在何处使用?工具链:GNUarm-none-eabi平台:Cortex-M4语言:C++这是我的典型构建标志:编译:arm-none-eabi-g++.exe-Wall-O3-mthumb-std=c++11-mcpu=cortex-m4-mfpu=fpv4-sp-d16-mfloat-abi=softfp-fsing
从网上的一些话我知道GCC很聪明,可以决定是否内联一个函数。inline关键字只是一个提示:GCC可以内联一个普通函数,而不能内联一个内联函数。但是对于我项目中的这个功能:structvb_pos{union{struct{intoffset;intl;};unsignedlonglongg_offset;};};staticinlinevoidvi_write_vtail_smart(structvi*vi){structvb_pos*vhead,*vtail,*cursor;vhead=&vi->v_head;vtail=&vi->v_tail;cursor=&vi->cursor
看完thisnicearticle(预编译头的护理和供给),我对这些在现实生活中如何实际工作有一些疑问。更具体地说,我如何知道我需要在以下场景中触发预编译头的重建:我决定在我的一个.cpp文件中#define一些东西,它改变了预处理器解释一些已经包含在我的预编译头文件中的头文件的方式我在我的一个.cpp文件中包含另一个header,它#define是一个特定的预处理器指令,它改变了预处理器解释已包含在预编译header中的header的方式更糟糕的是,当某些header#include其他header时,之前的问题可能会递归发生预编译header的使用是否应该强制执行某种限制性编码风格
让我们举个简单的例子:#includenamespacefoo{constexprintmain(intargc,char*argv[]){//code}}intmain(intargc,char*argv[]){returnfoo::main(argc,argv);}取决于代码是什么,clang会提示或不提示。如果代码是:coutclang提示:error:constexprfunctionneverproducesaconstantexpression[-Winvalid-constexpr]constexprintmain(intargc,char*argv[]){note:no
当在GCC4.9上移出一个unordered_set,然后重新使用移出的对象时,我在添加到它时得到除以零。我的理解(来自http://en.cppreference.com/w/cpp/utility/move)是可以使用移出的对象,前提是不违反其先决条件。在移出的集合上调用clear()很好(这在前提条件的上下文中是有意义的),但我不清楚我添加新元素是否违反了任何前提条件。示例代码:#includeusingnamespacestd;voidfoo(unordered_set&&a){unordered_setcopy=std::move(a);}voidtest(){unorder
我偶然发现了这段代码:std::stringexport_str="/path/to/file";std::ofstreamexport(export_str.c_str());if(export这可以在GCC4.9.3上正常编译和运行,但在GCC6.1.1上会出现此错误:error:nomatchfor‘operator}’and‘int’)if(export我尝试使用GCC6:-std=c++98(编译)-std=c++03(编译)-std=c++11(不编译)编辑:但是,在GCC4中,它仍然使用-std=c++11进行编译。.这个具体事实也在下面的答案中解释。:)所以我猜这方面的
我遇到了一个我确定很容易解决的问题,但我不知所措......我有一个执行以下代码的模板:Tvalue=d;if(std::numeric_limits::is_signed){if(value现在,出于显而易见的原因,当此代码针对无符号类型编译时,GCC会给我一个警告(由于数据类型的范围有限,比较总是错误的)。我完全理解这背后的原因,我进行了numeric_limits检查以查看是否可以让编译器关闭它(它适用于MSVC)。唉,在GCC下,我得到了警告。有什么办法(除了禁用警告,我什至不知道你是否可以使用GCC)来修复这个警告?代码永远不会被调用,我假设优化器也会编译它,但我无法摆脱警告
首先,我根本不知道我的问题是否有解决方案。我有以下情况:我开发了一个框架库,它依赖于其他几个库来访问特定的硬件等。到目前为止,这个框架库只是静态链接。对于使用框架库的可执行文件,只需链接可执行文件实际使用的代码的依赖项。(如果我根本不访问特定硬件,我就不必依赖其关联的库。)现在我还需要制作一个框架库的共享对象。此外,依赖项可作为共享库使用,因此不需要任何静态链接。我现在遇到的问题:在构建动态链接到框架库的应用程序时,我必须将所有依赖项动态链接到框架库或应用程序。(否则我会收到来自ld的undefinedreference投诉)我的问题:如果我知道我的应用程序不会使用依赖于此共享对象的框
我想知道如何使用GCC作为库来为我的程序解析C/C++/Java/ObjectiveC/Ada代码。我想绕过预处理并为用户编写的所有函数添加前缀My。就像这样Print();变成了MyPrint();我也希望对变量执行此操作。 最佳答案 你可以看这里:http://codesynthesis.com/~boris/blog/2010/05/03/parsing-cxx-with-gcc-plugin-part-1/这是关于如何使用gcc插件接口(interface)解析C++代码的说明。其他语言同理。你也可以试试mozilla的pi
我想知道GCC是否会将具有固定值的算术保留在运行时执行,或者是否会将其设置为它的答案,例如。constfloathalfPi=M_PI/2;它会“归结”方程并设置constfloathalfPi=1.57079;还是将算法留给运行时? 最佳答案 嗯...如果我们谈论积分,答案将是明确的是(在通用术语ConstantFolding).即使冗长的计算也可以在编译时完成……这实际上是模板非类型参数评估和(现在)constexpr变量所必需的。在浮点表示的情况下,一旦计算变得更复杂,事情就会变得有点复杂。问题在于,不同大小(以及精度)的浮点