【问题标题】:Can't turn off gcc optimizer, Makefile from automake无法关闭 gcc 优化器,来自 automake 的 Makefile
【发布时间】:2012-04-01 06:55:26
【问题描述】:

我正在尝试在调试会话中获取ZBar。我可以这样做,但我无法关闭优化器,因此我的调试会话意外地跳来跳去,并且许多变量在 Eclipse Indigo 中被标记为optimized-out。我在 Ubuntu 中运行。

我尝试在 Makefile 中的任何 gcc 调用中尽可能添加 -O0,因为最后一个 -O 是代理。我使用 -Q --help=optimizers 来查找要查找的内容,但它的输出有点奇怪:

libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I./include -I./zbar -I./include -O0 -O0 -Q --help=optimizers -Wall -Wno-parentheses -O0 -g -O0 -Q --help=optimizers -MT zbar/zbar_libzbar_la-config.lo -MD -MP -MF zbar/.deps/zbar_libzbar_la-config.Tpo -c zbar/config.c  -fPIC -DPIC -o zbar/.libs/zbar_libzbar_la-config.o
The following options control optimizations:
make[1]: *** [zbar/zbar_libzbar_la-config.lo] Error 1
  -O<number>                        
make: *** [all] Error 2
  -Ofast                            
  -Os                               
  -falign-functions                 [disabled]
  -falign-jumps                     [disabled]
  -falign-labels                    [disabled]
  -falign-loops                     [disabled]
  -fasynchronous-unwind-tables      [enabled]
  -fbranch-count-reg                [enabled]
  -fbranch-probabilities            [disabled]
  -fbranch-target-load-optimize     [disabled]
  -fbranch-target-load-optimize2    [disabled]
  -fbtr-bb-exclusive                [disabled]
  -fcaller-saves                    [disabled]
  -fcombine-stack-adjustments       [disabled]
  -fcommon                          [enabled]
  -fcompare-elim                    [disabled]

etc...

显然,我已经在几个地方放置了 -O0。我对 ZBar 使用的 automake 没有任何经验。我试图避免必须从头开始制作自己的 Makefile,是否有关于在哪里禁用优化器的建议?我已经在 Makefile 中搜索了所有与优化相关的 -O 和任何 -f;我没有找到。在进行 Makefile 修改尝试后,该项目已被清理。

【问题讨论】:

    标签: gcc compiler-optimization automake zbar-sdk


    【解决方案1】:

    在运行 configure 或运行 make 时最容易禁用优化。要么

    configure CFLAGS='-g -O0' CXXFLAGS='-g -O0'
    

    make CFLAGS='-g -O0' CXXFLAGS='-g -O0' clean all
    

    应该做你想做的。如果您在配置期间设置 CFLAGS/CXXFLAGS,这些值将用于所有不覆盖它们的 make 调用,而在 make 时设置它们是一次性的。

    【讨论】:

    • 两者都没有效果。请注意,我不是代码的作者,我只是尝试完成算法分析。将 -O0 与 make 调用一起将 -O0 置于任何其他标志之前以启用优化,使其无效。我没有看到在数千行 Makefile 代码中设置了任何优化标志...
    • CFLAGS 应该是 makefile 中 COMPILE 中设置的最后一项,因此除非包维护者覆盖您设置 CFLAGS 的尝试(应报告为错误),否则您的设置应该是最后的。如果您执行“CFLAGS=-this-option-is-an-error”,那么该选项会在编译期间出现吗?
    • 当我添加错误标志时,我得到:gcc: error: unrecognized option ‘-this-option-is-an-error’
    • 我刚刚粗略地查看了 zbar 自动工具设置,它看起来是正确的。您看到的优化标志可能来自 pkg-config。如果您提供 make 的示例输出以显示您试图避免的实际标志,这将有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多