0

我正在尝试 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”。

4

3 回答 3

3

-pg启用分析,-g包括有助于解释生成的配置文件的符号名称。

-pg选项需要传递给编译器链接器。

-l命令在您使用它的方式上没有意义,因为它需要一个库名称作为参数,所以只要您不提供一个,就离开-l

同样在开发过程中,我建议-Wall在编译期间启用所有警告的选项。

所以你可以试试这个 make 命令:

make USE_LOCAL_HEADERS=0 LDFLAGS='-L. -pg' BASE_CFLAGS=-m32 CFLAGS='-fopenmp -pg -g -Wall'
于 2011-11-18T08:35:31.183 回答
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 以按照您想要的正确方式组合它们。

于 2011-11-18T07:09:43.133 回答
-1

make只是“自动确定需要重新编译大型程序的哪些部分,并发出重新编译它们的命令”(man make)。看起来make无法理解您的论点;在遇到错误之前它实际上并没有运行任何命令。

很抱歉,我无法为您提供更多帮助,但您的问题出在您的 make 文件或类似文件中。您应该阅读 make 文件是什么,以及如何 gprof 您的程序并了解 make 和 gcc 之间的区别,并重新评估您正在尝试做什么。Make 可能对你没用。

于 2011-11-18T06:26:56.220 回答