标签: compiler-flags

C++ 添加调试代码,仅在调试时运行

正如问题所解释的那样:我想添加一些仅在程序附加到调试器时运行的调试代码。我想这个flagpre-processor变量对于每个编译器都会不同......

就我而言,我将 Microsoft Visual Studio 2010 与 C++ 一起使用。

我还在家里的另一台运行 Ubuntu 10.4 和 C++ 的计算机上使用 Eclipse。

c++ debugging compiler-flags c-preprocessor

5
推荐指数
1
解决办法
6989
查看次数

如何让HotSpot VM处于调试模式?

我需要HotSpot VM处于调试模式的原因是我想要一些JVM选项,比如

-XX:+PrintCFGFile
,得到支持.

我目前的JVM版本就像

java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.1) (suse-3.1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

我是否必须安装一些工具/补丁来实现这一目标?

谢谢!

java jvm jvm-hotspot compiler-flags debug-mode

5
推荐指数
1
解决办法
1899
查看次数

为什么常见的部分变量只出现在目标文件而不是可执行文件中?

我正在尝试更多地了解可执行文件的"常见"部分,我注意到objdump在编译代码时,我可以看到只在对象文件(*.o而不是可执行文件)上放置在公共代码中的变量.

这是为什么?

//test.c

int i[1000];
int main(){return 0;}
Run Code Online (Sandbox Code Playgroud)

构建命令:

> gcc -g0 -fcommon -c test.c
> gcc -g0 -fcommon test.c
Run Code Online (Sandbox Code Playgroud)

objdump显示i在符号表的公共部分中:

> objdump -x test.o
  ...
  SYMBOL TABLE:
  ...
  00000fa0    O   *COM*   00000020  i
Run Code Online (Sandbox Code Playgroud)

除非我在可执行文件上运行它:

> objdump -x a.out
  ...
  SYMBOL TABLE:
  ...
  0804a040 g  O   .bss    00000fa0  i
Run Code Online (Sandbox Code Playgroud)

如果我使用-fno-common标志重建目标文件,而不是.bss像在可执行文件上那样显示在段中.最终的可执行文件没有这个"COMMON"部分吗?

c gcc compiler-flags objdump

5
推荐指数
1
解决办法
1192
查看次数

使用Clang抑制匿名结构警告 - "-fms-extensions"不起作用

我有一个Xcode项目,我使用一些第三方库和Visual Studio C代码与Clang一起编译.

在第三方库中,匿名结构用在头文件中(我无法真正改变它).因此我得到了这个警告:

"myfile.h:47:17:匿名结构是GNU扩展"

如此处所述,我试图在我的Xcode项目的C标志中传递"-fms-extensions":http://clang.llvm.org/docs/UsersManual.html#microsoft-extensions

没运气.知道怎么摆脱那个警告吗?

clang compiler-flags compiler-warnings suppress-warnings visual-c++

5
推荐指数
1
解决办法
1376
查看次数

使用 clang 而不是 gcc 编译时的程序段错误

摘要:当我-mcmodel=large在使用 clang 编译时设置标志时,访问线程本地存储时我的应用程序段错误。使用 gcc 编译时不会发生这种情况。这是叮当声的错误还是我做错了什么?

详情

以下代码段在设置-mcmodel标志时使用clang编译时崩溃,但使用gcc编译时运行良好

#include <stdio.h>
#include <pthread.h>

__thread int tlsTest;

int main(int argc, char **argv) {
  printf("&tlsTest is %p\n", &tlsTest);
  tlsTest = argc;
  printf("tlsTest is %d\n", tlsTest);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译时:clang test.c -pthread -mcmodel=large结果是:

&tlsTest is 0x7fd24262c6fc
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

但是:gcc test.c -pthread -mcmodel=large结果是:

&tlsTest is 0x7f1cf785c6fc
tlsTest is 1
Run Code Online (Sandbox Code Playgroud)

该程序在编译时也能正常工作: clang test.c -pthread

我阅读了以下有关 mcmodel 的链接,但我不确定这与我观察到的段错误有何关系。请注意,此问题-mcmodel=medium也发生在,但不发生在-mcmodel=small.

这是 clang/llvm …

clang compiler-flags

5
推荐指数
0
解决办法
603
查看次数

标志“-D_POSIX_C_SOURCE=200112L”是什么意思?

没有它,我将无法使用连接到互联网所需的库,但我不知道这意味着什么:

-D_POSIX_C_SOURCE=200112L

谁能解释一下?

c compiler-flags

5
推荐指数
1
解决办法
3749
查看次数

-I标志在GCC(Linux)

我找到了一个包含Makefile的源文件包,我经历了它,并且在CFLAG变量中,有一个FLAG -I,我在网上搜索过,但找不到它实际上做了什么.它是否与C文件中包含的库文件相关?(stdio.h,unistd.h,pthread.h)

请指出一个消息来源或简要解释一下,Flag -I有什么作用?

-问候

c gcc compiler-flags

5
推荐指数
1
解决办法
4654
查看次数

使用 -O3 或 -Ofast 来编译您的基准代码是否现实,还是会删除代码?

当使用下面的基准代码编译时,-O3它在延迟方面的差异给我留下了深刻的印象,所以我开始怀疑编译器是否通过以某种方式删除代码而“作弊”。有没有办法检查?我可以安全地进行基准测试-O3吗?期望速度提高 15 倍是否现实?

没有的结果-O3:平均:239纳米最小:230 纳米(900 万次迭代) 有
结果-O3:平均:14纳米,最小:12 纳米(900 万次迭代)

int iterations = stoi(argv[1]);
int load = stoi(argv[2]);

long long x = 0;

for(int i = 0; i < iterations; i++) {

    long start = get_nano_ts(); // START clock

    for(int j = 0; j < load; j++) {
        if (i % 4 == 0) {
            x += (i % 4) * (i % 8);
        } else {
            x …
Run Code Online (Sandbox Code Playgroud)

c++ optimization g++ compiler-flags compiler-optimization

5
推荐指数
1
解决办法
1452
查看次数

并行化 CMake 的 `CheckCCompilerFlag`

我在我的默认构建中使用了很多编译器标志- 在我较慢的笔记本电脑上从头开始运行时让 CMake 检查所有这些需要大约 10-15 秒,当我从头开始重建多个项目或切换时,这可能会很烦人之间gccclang用于测试目的。

check_cxx_compiler_flag用来检查编译器标志是否有效,并且每次检查都由 CMake 按顺序运行。

假设 CMake 所做的是尝试编译一个将标志传递给编译器并检查编译是否成功的虚拟文件,我认为理论上可以产生多个编译器进程来并行测试多个编译器标志。不幸的是,我找不到这样做的方法。

有没有办法并行制作 CMake 测试编译器标志(可能通过产生多个编译器进程)

c++ cmake compiler-flags

5
推荐指数
0
解决办法
101
查看次数

对于Java 9应用程序,如何在Windows上禁用缩放UI?

Java 8中没有适当的HiDPI支持.

Java 9中,JavaFx应用程序正确扩展到它们所在的监视器.例如,如果我的监视器设置为150%的缩放,Java应用程序将缩放到150%.

见:http://openjdk.java.net/jeps/263

但是,出于测试目的,我需要能够在Windows 10中使用java.exe标志禁用扩展.如何实现此目的?

另外,也许我可以在应用程序本身内以编程方式禁用(并重新启用)?

scaling compiler-flags java-9 hidpi

5
推荐指数
2
解决办法
1369
查看次数