编译器无法识别的任何命令行参数都将解释为可能是链接程序选项、对象程序文件名或库名称。
基本区别是:
无法识别的选项(带有 -)会生成警告。
无法识别的非选项(不带 -)不生成警告。但是,这些非选项将被传递给链接程序,如果链接程序无法识别它们,它们将生成链接程序错误消息。
例如:
demo% f95 -bit move.f <- -bit is not a recognized f95 option f95: Warning: Option -bit passed to ld, if ld is invoked, ignored otherwise demo% f95 fast move.f <- The user meant to type -fast ld: fatal: file fast: cannot open file; errno=2 ld: fatal: File processing errors. No output written to a.out
请注意,在第一个示例中,f95 无法识别 -bit,该选项将被传递给链接程序 (ld),后者试图对其进行解释。因为单字母 ld 选项可以串联起来,所以链接程序会将 -bit 视为 -b -i -t,而这些都是合法的 ld 选项!这可能是(也可能不是)用户所希望的结果。
在第二个示例中,用户本想键入 f95 选项 -fast,但忽略了前导短划线。编译器再次将参数传递给链接程序,而链接程序将参数解释为一个文件名。
这些示例表明在编写编译器命令行时应格外小心!