我在Ubuntu 17.10上使用GPROF对C文件进行了一些测试,当我使用gprof执行生成的文件(gmon.out
)、使用-pg选项编译和链接时,我得到了一个空的平面和调用图。
但是,我发现这是一个GCC bug,我将不得不用-no-pie
选项编译和链接文件。
- 编译:
gcc -c main.c file-1.c file-2.c -pg [-no-pie]
- 链接:
gcc -o test main.o file-1.o file-2.o -pg [-no-pie]
我有GCC 7.2版本。
这个选项是如何工作的?如果我不使用这个选项,为什么图形是空的?
1条答案
按热度按时间kxxlusnw1#
该标志告诉gcc不要生成position independent executable(PIE)。PIE是启用地址空间布局随机化(ASLR)的前提条件。ASLR是一种安全特性,内核在每次运行时都会将二进制文件和依赖项加载到虚拟内存的随机位置。