我最近在Linux上推出了一个新的Toolchain,gcc 4.5.0和binutils 2.20 with gold。现在我对这个新事物PGO感到好奇。虽然很清楚它是如何与可执行文件一起工作的,但我还是找不到共享库的答案。我通过谷歌在gcc邮件列表上找到了两个未答复的帖子,就是这样。
所以这就是我的尝试: 只要我不标记-fprofile-生成一切都很好,我的.so是由主程序dlopen()编辑并且完美无缺。 当编译和链接-fprofile-generate时,库被加载,一切正常,但是当我结束主程序时,我得到一个带有coredump的sigsegv。
我将核心文件提供给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文件。
有什么想法吗?
Philipp
答案 0 :(得分:2)
我与PGO建立了一个共享库。
我所做的是使用profile-generate构建一个包含所有.o文件的“profile”目录。然后我将它们链接到一个共享库。然后我使用链接到也使用profile-generate构建的可执行文件的库进行分析运行。
之后,我构建了一个“发布”目录,其中包含使用profile-use构建的所有.o文件,将它们链接到共享库中,并且我有一个使用PGO构建的共享库。