标签: compiler-flags

使用g ++创建静态库的优化和标志

我刚刚开始使用Linux上的g ++编译器,并对编译器标志有一些疑问.他们是这样的

优化

我阅读了有关优化标志的内容-O1,-O2-O3在g ++手册页中.我不明白何时使用这些标志.通常你使用什么优化级别?g ++手册说明了以下内容-O2.

优化甚至更多.GCC几乎执行所有支持的优化,不涉及空速 - 权衡.指定-O2时,编译器不执行循环展开或函数内联.与-O相比,此选项增加了编译时间和生成代码的性能.

如果它没有进行内联和循环展开,那么如何实现所述性能,是否建议使用此选项?

静态库

如何使用g ++创建静态库?在Visual Studio中,我可以选择一个类库项目,它将被编译成"lib"文件.什么是g ++中的等价物?

c++ optimization g++ compiler-flags

30
推荐指数
3
解决办法
7万
查看次数

"首选32位"编译器标志对Visual Studio(C#,VB)意味着什么?

刚刚安装了Visual Studio 11开发人员预览版.在编译指定了AnyCPU目标的托管(C#,VB)应用程序时,我在项目属性中看到一个名为"Prefer 32-bit"的新选项.这似乎不是类库的选项,只是顶级应用程序.

这个标志表示什么?

c# vb.net compiler-flags visual-studio-2012

27
推荐指数
1
解决办法
1万
查看次数

gcc的-pg标志如何工作?

我试图了解编译C代码时-pg(或-p)标志如何工作gcc.

官方gcc文档仅说明:

-pg
生成额外的代码以编写适用于分析程序gprof的配置文件信息.编译所需数据的源文件时必须使用此选项,并且在链接时也必须使用它.

这真的让我感兴趣,因为我正在对分析器进行一项小型研究 - 试图选择最适合这项工作的工具.

gcc compilation compiler-flags gprof

22
推荐指数
2
解决办法
2万
查看次数

C++数组上指针数学的未定义行为

为什么这个程序的输出是4

#include <iostream>

int main()
{
    short A[] = {1, 2, 3, 4, 5, 6};
    std::cout << *(short*)((char*)A + 7) << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,在x86 little endian系统上,char有1个字节,短2个字节,输出应该是0x0500,因为数组中的数据A是十六进制的休闲:

01 00 02 00 03 00 04 00 05 00 06 00
Run Code Online (Sandbox Code Playgroud)

我们从开始向前移动7个字节,然后读取2个字节.我错过了什么?

c++ gcc endianness compiler-flags language-lawyer

21
推荐指数
2
解决办法
1180
查看次数

CompileThreshold,Tier2CompileThreshold,Tier3CompileThreshold和Tier4CompileThreshold控制什么?

HotSpot的分层编译使用解释器,直到调用(对于方法)或迭代(对于循环)的阈值触发具有自分析的客户端编译.使用客户端编译,直到另一个调用或迭代阈值触发服务器编译.

打印HotSpot的标志使用-XX:+ TieredCompilation显示以下标志值.

intx CompileThreshold      = 10000 {pd product}        
intx Tier2CompileThreshold = 0     {product}           
intx Tier3CompileThreshold = 2000  {product}           
intx Tier4CompileThreshold = 15000 {product}           
Run Code Online (Sandbox Code Playgroud)

仅有客户端和服务器编译器的标志太多.哪些编译器由这些标志控制?如果不是客户端和服务器,其他编译器的目的是什么?

在这种情况下是否忽略CompileThreshold和Tier2CompileThreshold?触发客户端编译时Tier3CompileThreshold控制什么?触发服务器编译时Tier4CompileThreshold控制什么?

java jit jvm-hotspot compiler-flags

20
推荐指数
1
解决办法
6207
查看次数

-msse,-msse2,-mssse3,-msse4 rtc的cflgs sse选项有什么不同?以及如何确定?

对于GCC CFLAGS选项:-msse,-msse2,-mssse3,-msse4,-msse4.1,-msse4.2.它们是独家使用还是可以一起使用?

我的理解是,选择要设置的位置取决于程序将运行的目标拱,是否支持,这是正确的吗?

如果是这样,我怎么知道我的目标拱支持什么?在Linux中,我是cat/proc/cpuinfo,但是如果是mac还是Windows呢?

谢谢!

gcc sse gnu g++ compiler-flags

18
推荐指数
1
解决办法
2万
查看次数

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

当我g++使用-Og选项编译我的C++程序时,我会看到变量<optimized out>,并且当前行有时会跳过.这种行为是期望在这个优化级别,还是我有一些问题?gcc的手册页说:

-Og

优化调试体验. -Og启用不会干扰调试的优化.它应该是标准编辑 - 编译 - 调试周期的优化级别,提供合理的优化级别,同时保持快速编译和良好的调试体验.

因此我没想到这种行为.在我的系统上,我有g ++版本4.9.2和gdb版本7.7.1.

c++ g++ compiler-flags

18
推荐指数
1
解决办法
2261
查看次数

为什么不能打开所有消毒剂?

Clang有各种消毒剂,可以在运行时开启以解决问题.
但是,有一些消毒剂我不能一起使用.这是为什么?

clang++-3.9 -std=c++1z -g -fsanitize=memory -fsanitize=address -o main main.cpp                                                                                   1
clang: error: invalid argument '-fsanitize=address' not allowed with '-fsanitize=memory'
Run Code Online (Sandbox Code Playgroud)

这不是什么大问题,但是当我运行单元测试时,它需要的时间比它应该的长,因为我为相同的测试创建了多个二进制文件,并分别运行它们.

clang++-3.9 -std=c++1z -g -fsanitize=address -o test1 test.cpp
clang++-3.9 -std=c++1z -g -fsanitize=memory -fsanitize=undefined  -o test2 test.cpp
Run Code Online (Sandbox Code Playgroud)

c++ clang compiler-flags sanitizer clang++

18
推荐指数
2
解决办法
2728
查看次数

如何强制xcode在特定文件上使用ARC?

我的项目包含XMPPFramework,其中包含必须与ARC一起使用的文件.但是我的项目是Non ARC,由于链接到它的某些其他库而无法转换.

如何强制编译器仅在某个类上使用ARC?

xcode xmpp build compiler-flags automatic-ref-counting

17
推荐指数
1
解决办法
8062
查看次数

Clang:除了...之外,将所有警告提升为错误

在我目前的项目中 - 我可能会在一段时间内 - 继续工作,我们已经决定使用该-Werror标志,因为我们之前的"没有警告!"政策没有达到预期的效果.

然而,这带来了一个问题:

API不能再以a)被正常构建工具链标记的方式标记为已弃用,并且b)不会破坏构建.

所以我想这个问题归结为:

有旗帜-Werror-no-${something_I_dont_want_to_promote_to_an_error}吗?

我发现#pragma clang diagnostic error几乎达到我想要的-除了我不能赶上所有启用的警告,暗示由编译器...

提前致谢.

clang compiler-flags

17
推荐指数
1
解决办法
9284
查看次数