gcc -print-prog-name = ???没有像我期望的那样工作

时间:2010-01-31 17:32:40

标签: gcc g++

如果我理解gcc手册正确而不是选项-print-prog-name应该打印所用程序的名称。

但似乎这个选项只能回应给定的参数

示例:

gcc -print-prog-name=ld
--> ld

gcc -print-prog-name=xxxsome-funny-name
--> xxxsome-funny-name

这是预期的行为吗?我认为它应该打印类似

gcc -print-prog-name=ld
--> /usr/bin/ld

gcc -print-prog-name=xxxsome-funny-name
--> unknown program

编辑:使用gcc v4.2.4在Debian Lenny 64bit上进行测试

2 个答案:

答案 0 :(得分:2)

与此同时,我发现了

行为的另一个原因
gcc -print-prog-name=ld

gcc不会直接调用ld命令。

gcc调用collect。它是collect,后者又调用ld。

答案 1 :(得分:0)

我认为-print-prog-name选项仅适用于GCC的一小组工具 在内部使用。例如,

$ gcc -print-prog-name=cc1
/usr/libexec/gcc/x86_64-redhat-linux/3.4.5/cc1

$ ls -L /usr/libexec/gcc/x86_64-redhat-linux/3.4.5/
cc1  cc1plus  collect2  f771  jc1  jvgenmain
$ gcc -print-prog-name=f771
/usr/libexec/gcc/x86_64-redhat-linux/3.4.5/f771

所以gcc -print-prog-name知道该目录中存在的工具。但是:

$ gcc -print-prog-name=ld
ld

我的猜测是,如果gcc -print-prog-name返回绝对路径,则会配置它 使用该版本的程序,无论你的$ PATH是什么 - 否则 它只是回复你给它的东西而不将其解析为绝对路径名。