我相信 -O2 标志导致我不得不在每台机器上重新编译.为什么
I believe the -O2 flag is causing me to have to recompile on each machine. Why?
我正在使用库(openFrameworks(构建一个项目,编译器中为发布目标设置的默认选项包括-O2
标志,我从未使用过。直到最近,我什么也没想,因为一切似乎都在正常。然后,我开始在未用于开发的机器上进行测试,程序崩溃了(它甚至没有到达我的任何调试语句(。
在目标计算机本身上重新编译可使可执行文件正常工作。-O2
标志可能导致这种情况吗?在目标计算机上重新编译时,我没有收到任何错误或警告,所以我不太确定为什么会发生这种情况。我怀疑-O2
标志的原因是因为它是我从未使用过的唯一一个在项目中启用的标志。
我还没有测试它是否发生在-O1
或-O3
标志中。
上,我所有的测试都在Windows 7和Windows 8系统上进行,使用MinGW(TDM-GCC(4.8.1在Code::Blocks中编译。
-O2 标志:优化比 -O 标志更多。 GCC 执行几乎所有受支持的优化,这些优化不涉及空间速度权衡。指定"-O2"时,编译器不执行循环展开或函数内联。与"-O"相比,此选项增加了编译时间和生成代码的性能。
"-O2"打开由"-O"指定的所有优化标志。它还会打开以下优化标志:-fforce-mem -foptimize-sibling-call -fstrength-reduce -fcse-follow-jumps -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt -fgcse -fgcse-lm -fgcse-sm -fdelete-null-pointer-check -fexpensive-optimization -fregmove -fschedule-insns -fschedule-insns2 -fsched-interblock -fsched-spec -fcaller-save -fpeephole2 -freorder-blocks -freorder-function -fstrict-aliasing -falign-function -falign-jumps -falign-loops -falign-label
结果是,任何体系结构或操作系统差异都会导致内存故障或分支错误。 当您使用经过优化的编译可执行文件或库时,它将利用该平台上可用的所有特定硬件。 如果你有一个苹果对苹果的硬件比较和操作系统都是相同的,你有一个机会让它工作,但即便如此,在运行时尝试之前也很难做出决定。 问题是它依赖于编译器的细节,而不是通用的。
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 使用简单类型列表实现的指数编译时间.为什么
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 为什么 gcc 编译这个而 msvc 没有
- 为什么新的随机库比std::rand()更好
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 编译 llvm 3.1 时,为什么会出现错误:在">"标记之前预期主表达式
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- 为什么我的 EnumWindowProc 不能用 C 语言编译?
- 为什么我的 BaseClass:Method 代码编译(带有单冒号)?
- 为什么下面的模板化类成员函数无法编译?
- 为什么我的节点在我设置后被设置为 nullptr = 新节点?
- 如何在不退出和失去断点的情况下重新加载重新编译的二进制文件
- 包含 std::forward 会产生错误,但其省略会编译.为什么
- RCpp:如何在不重新启动R的情况下重新加载重新编译的C++代码
- 我相信 -O2 标志导致我不得不在每台机器上重新编译.为什么
- clang 在 Coliru 中编译此代码段,但不在编译器资源管理器中编译.为什么
- Ifstream忽略空格和新行-为什么?