2

我最近在 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 文件被保存。

有任何想法吗?

菲利普

4

1 回答 1

1

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

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

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

于 2010-12-08T20:36:16.353 回答