gcc-10-ar 认为无效的“。”选项正在传递给它

gcc-10-ar thinks the invalid "." option is being passed to it

我正在使用 Source Engine 编译游戏。当我 运行 make 时,归档工具会抱怨一个无效的选项 ".":

/usr/bin/ar: invalid option -- '.'

我安装的每个归档程序都会出现这种情况:gcc-10-arllvm-10-arbusybox ar

makefile 试图 运行 的命令是:

gcc-ar-10 ../lib/public/linux32/raytrace.a ./obj_raytrace_linux32/release/raytrace.o ./obj_raytrace_linux32/release/trace2.o ./obj_raytrace_linux32/release/trace3.o

我不经常使用归档工具,但这对我来说似乎是一个有效的命令。 通常这些问题是一个破折号被添加到前面,这使得归档工具认为它后面的任何东西都是“迷你选项”,比如 -lm

在我的例子中,根本没有任何破折号。我认为 . 来自路径,但应将其解释为文件路径而不是命令行参数。

ar 的第一个参数应该是一个或多个字符,指示要执行的操作(可选地以 - 为前缀)和该操作的修饰符。

如果你想从目标文件创建一个新的存档,你可能需要 rcs,它要求 ar 将列出的文件插入存档并替换(r ),必要时创建存档 (c) 并为存档创建索引 (s)。

例如:

gcc-ar-10 rcs ../lib/public/linux32/raytrace.a ./obj_raytrace_linux32/release/raytrace.o ./obj_raytrace_linux32/release/trace2.o ./obj_raytrace_linux32/release/trace3.o

我假设 ar 给你错误,因为它试图将第一个参数的第一个 . 解释为这些操作指令之一。

另见 man ar


至于链接存储库(虽然我没有使用它的经验,这只是基于查看其中一个文件的观察):似乎 Makefile 期望 AR,如果它被指定在环境中,不仅包括可执行文件的路径,还包括 above-mentioned 选项(请参阅 this line 设置默认值)。

这不是 AR 环境变量通常所期望的,因此这是非常规的。解决方法是将 rcs 参数直接添加到环境变量中,例如如果 AR 已经像往常一样在环境中设置:

AR="$AR rcs" make

而不是

make

不要使用这些选项全局设置 AR,因为其他典型的 Makefile 会被它混淆。