【问题标题】:Is profile guided optimization possible with shared libraries in gcc?使用 gcc 中的共享库可以进行配置文件引导优化吗?
【发布时间】:2010-06-02 20:06:16
【问题描述】:

我最近在 Linux 上推出了一个新的工具链,包括 gcc 4.5.0 和带有黄金的 binutils 2.20。现在我对PGO这个新事物很好奇。虽然很清楚它如何与可执行文件一起工作,但我无法在共享库上找到答案。我通过 google 在 gcc 邮件列表中找到了两个未答复的帖子,仅此而已。

所以这就是我尝试过的: 只要我不标记 -fprofile-generate 一切都很好,并且我的 .so 由主程序 dlopen()'ed 并且可以完美运行。 当编译并与 -fprofile-generate 链接时,库被加载,一切正常,但是当我结束主程序时,我得到一个带有 coredump 的 sigsegv。

我将 corefile 提供给 gdb 并得到了这个:

#0 0x00000000 in ?? ()
No symbol table info available.
#1 0x1f32bc2f in ?? ()
No symbol table info available.
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

当然不会保存 .cdda 文件。

有什么想法吗?

菲利普

【问题讨论】:

  • 你是如何运行 GDB 的?我猜你是这样做的:“gdb core”。改为这样做:“gdb exename core”。很有可能,您将获得更有意义的堆栈跟踪。或者,在 GDB 下从头开始运行可执行文件:“gdb exename”然后“run”。
  • gdb exename core 正是我运行 gdb 的方式。

标签: gcc profiling shared-libraries compiler-optimization


【解决方案1】:

我用 PGO 构建了一个共享库。

我所做的是使用 profile-generate 构建一个包含所有 .o 文件的“profile”目录。然后我将它们链接到一个共享库中。然后我使用链接到同样使用 profile-generate 构建的可执行文件的库进行分析运行。

之后,我构建了一个“发布”目录,其中包含使用 profile-use 构建的所有 .o 文件,将它们链接到共享库中,然后我就有了一个使用 PGO 构建的共享库。

【讨论】:

  • 那么,这样您创建了 2 个配置文件 - 一个用于共享对象,一个用于可执行文件,对吗?您是否以某种方式将它们作为命令行参数传递给 gcc?还是 gcc 找到它们并自动使用它们(如果在默认目录和默认名称中创建)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2010-09-08
  • 2023-03-30
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多