我正在尝试gprof我的程序。我想要逐行分析。 但是,我似乎无法正确使用语法。我使用的是“make”而不是“gcc”,所以请仅提供适合make的建议。如果你能给我完整的“make”语法,我将非常感激。 基于这个网站: http://sourceware.org/binutils/docs/gprof/Output-Options.html [^] http://sourceware.org/binutils/docs/gprof/Line_002dby_002dline.html [^] 这是我输入的内容:
make USE_LOCAL_HEADERS=0 LDFLAGS='-L.' BASE_CFLAGS=-m32 CFLAGS='-fopenmp -pg -l -g'
输出结果为:
/usr/bin/ld: cannot find -l-g
collect2: ld returned 1 exit status
make[2]: *** [build/release-linux-ppc64/ioquake3.ppc64] Error 1
make[2]: Leaving directory `/r/home7/yasir/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_clean'
make[1]: *** [targets] Error 2
make[1]: Leaving directory `/r/home7/yasir/minoru/cfe2/yasirTemp/ioquake3dev/svfb_201110271440/ioquake3dev_clean'
make: *** [release] Error 2
我需要选项“-l”,“ - g”和“-pg”。
答案 0 :(得分:3)
-pg
启用分析,-g
包含有助于解释生成的配置文件的符号名称。
-pg
选项需要传递给编译器和链接器。
-l
命令在你使用它的方式上没有意义,因为它需要一个库名作为参数,所以只要你不提供一个,就离开-l
。
同样在开发过程中,我建议使用-Wall
选项在编译期间启用所有警告。
所以你可以尝试这个make命令:
make USE_LOCAL_HEADERS=0 LDFLAGS='-L. -pg' BASE_CFLAGS=-m32 CFLAGS='-fopenmp -pg -g -Wall'
答案 1 :(得分:1)
您可以将大部分内容作为环境变量传递,使“应该”做正确的事情并将它们用于编译器:
$ USE_LOCAL_HEADERS=0 \
LDFLAGS='-L.' \
BASE_CFLAGS=-m32 \
CFLAGS='-fopenmp -pg -g' \
make
这将使USE_LOCAL_HEADERS,LDFLAGS,BASE_CFLAGS和CFLAGS成为make和gcc可以看到的环境变量。您可能需要编辑Makefile,以正确的方式将它们组合起来。
答案 2 :(得分:-1)
make
只是“自动确定需要重新编译大型程序的哪些部分,并发出重新编译它们的命令”(man make)。看起来make
无法理解你的论点;它实际上并没有在遇到错误之前运行任何命令。
对不起,我不能再帮你了,但你的问题在你的make文件或类似文件中。您应该阅读make文件的内容,以及如何gprof您的程序并理解make和gcc之间的区别,并重新评估您要执行的操作。制作可能对你没用。