草庐IT

c++ - 如何减小 MinGW g++ 编译器生成的可执行文件的大小?

我有一个简单的“Helloworld”C++程序,它在WinXP下由MinGWg++编译器编译为500kB可执行文件。有人说这是由iostream库和libstdc++.dll的静态链接引起的。使用-s链接器选项有点帮助(减少50%的大小),但我只对是否可以使用动态链接将libstdc++.dll与可执行文件一起复制?如果可以,如何实现?已解决:我使用的是MinGW3.4。现在我更新到最新的MinGW4.6,大小减少了90%到50kB,使用-s选项甚至到了9kB,这完全足够了。无论如何-感谢大家的帮助。给你我的结果C++HelloWorld程序使用iostreamMinGW|noopt

c++ - 我如何找出为什么 g++ 在特定文件上花费很长时间?

我正在使用linux上的mingw32交叉编译器构建大量自动生成的代码,包括一个特别大的文件(约15K行)。大多数文件都非常快,但是这个大文件需要很长的时间(约15分钟)才能编译。我曾尝试操纵各种优化标志以查看它们是否有任何效果,但没有任何运气。我真正需要的是某种方法来确定g++正在做什么,这需要很长时间。是否有任何(相对简单的)方法可以让g++生成有关不同编译阶段的输出,以帮助我缩小可能出现的问题?遗憾的是,我没有能力重新构建这个交叉编译器,因此向编译器添加调试信息并单步执行是不可能的。文件内容:一堆包含一堆字符串比较一堆if-then检查和构造函数调用该文件是一个工厂,用于生成某个

c++ - 无法用 64 位 g++ 编译 32 位

我正在使用代码块。我正在使用ubuntu。这是编译的输出。g++-Wall-O2-m32-nostdlib-Iinclude-c/home/miroslav/Development/WEBGINE/src/WEBGINE/Component.cpp-oobj/ReleaseCGI32/src/WEBGINE/Component.og++-Wall-O2-m32-nostdlib-Iinclude-c/home/miroslav/Development/WEBGINE/src/WEBGINE/Debug/ComData.cpp-oobj/ReleaseCGI32/src/WEBGINE/

c++ - 使用 g++ 和 -Og 选项优化的变量

当我用g++编译我的C++程序时使用-Og选项我看到的变量是,并且当前行有时会跳过。这种优化级别的行为是预期的,还是我有一些问题?gcc的手册页说:-OgOptimizedebuggingexperience.-Ogenablesoptimizationsthatdonotinterferewithdebugging.Itshouldbetheoptimizationlevelofchoiceforthestandardedit-compile-debugcycle,offeringareasonablelevelofoptimizationwhilemaintainingfastco

c++ - 哪个是更专业的模板功能? clang 和 g++ 对此有所不同

在使用可变参数模板时,跟随thisSOquestion(注意:不是必须去那里回答这个问题),对于以下模板重载函数,我遇到了clang(3.8)和g++(6.1)的不同行为:templatestructpack{};templateconstexprboolstarts_with(a,b){returnfalse;}templateclassPACK_A,templateclassPACK_B,typename...Ts1,typename...Ts2>constexprboolstarts_with(PACK_A,PACK_B){returntrue;}intmain(){std::c

c++ - 是否有任何 g++ 选项可以转储类布局和 vtables?

这个问题在这里已经有了答案:PrintlayoutofC++objectwithg++compiler(3个回答)关闭5年前。我想看看g++如何为类和虚拟表分配内存。有没有办法转储这些信息,使用g++的选项? 最佳答案 g++-fdump-class-hierarchy-csource_file.cpp 关于c++-是否有任何g++选项可以转储类布局和vtables?,我们在StackOverflow上找到一个类似的问题: https://stackoverf

c++ - g++编译错误 "... is protected from within this context",而clang没有错误

我有以下代码:#includeclassBaseClass{protected:staticintx;};intBaseClass::x;classDerivedA:publicBaseClass{public:DerivedA(){x=3;}};classDerivedB:publicBaseClass{public:DerivedB(){std::cout使用g++编译(g++classtest.cpp)我收到以下错误:classtest.cpp:Inconstructor‘DerivedB::DerivedB()’:classtest.cpp:9:5:error:‘intBase

c++ - 如何告诉 g++ 编译器在哪里搜索包含文件?

在“工作目录”中,我有很多相互#include的*.cpp和*.h文件以及来自子目录的文件。例如:#include"first.h"#include"second.h"#include"dir1/third.h"#include"dir2/fourth.h"在我自己的目录(不同于“工作”目录)中,我想创建一个新的*.cpp和*.h文件,其中包含“工作”目录中的文件之一。例如:#include"/root/workingdirectory/first.h"但是,它不起作用。因为“first.h”可能包含“second.h”并且“second.h”不在我的目录中。有没有办法告诉编译器它需要

c++ - 如何在 MacOS X 上安装 g++?

我想在MacOSX上使用g++编译器编译C++代码。如何安装? 最佳答案 这是AppleXCode工具包附带的编译器。他们已经破解了一点,但基本上它只是g++。您可以在此处免费下载XCode(嗯,大多数情况下,您必须注册成为ADC成员(member),但这也是免费的):http://developer.apple.com/technology/xcode.html编辑2013-01-25:这个答案在2010年是正确的。它需要更新。虽然XCode工具仍然具有命令行C++编译器,但在最近的OSX版本(我认为是10.7及更高版本)中已切换

c++ - 为什么这个 SFINAE 片段不能在 g++ 中工作,而是在 MSVC 中工作?

在MSVC2017中,这工作正常,两个static_asserts都没有按预期触发:templatestructdo_have_size{template().size())>staticstd::true_typecheck(T);staticstd::false_typecheck(...);usingtype=decltype(check(std::declval()));};intmain(){usingTR=typenamedo_have_size>::type;usingFL=typenamedo_have_size::type;static_assert(std::is_