I'm compiling a game using the Source Engine. When I run make, after a while the archiver tool complains about an invalid option ".":
/usr/bin/ar: invalid option -- '.'
this happens with every archiver I have installed: gcc-10-ar
, llvm-10-ar
, and busybox ar
.
The command the makefile is trying to run is:
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
I don't use the archiver tool often, but this looks like a valid command to me.
Normally the issue with those is that a dash is being prepended which makes the archiver tool think whatever is following it are the "mini options" like -lm
In my case there aren't any dashes at all. I think the .
is from the path but that should be interpreted as a file path and not a command-line argument.
The first argument to
ar
is supposed to be one or more characters indicating the operation to perform (optionally prefixed with-
) and modifiers to this operation.If you want to create a new archive from the object files, you probably want
rcs
, which asksar
to insert the listed files into the archive with replacement (r
), create the archive if necessary (c
) and to create an index for the archive (s
).So for example:
I assume that
ar
is giving you the error since it tries to interpret the first.
of the first argument as one of these operation instructions.See also
man ar
.As for the linked repository (although I have no experience with it and this is just an observation based on looking at one file in it): It seems that the Makefile expects
AR
, if it is specified in the environment, to include not only the path to the executable, but also the above-mentioned options (see this line setting a default value).This is not what is usually expected from the
AR
environment variable, so this is unconventional. A workaround is to add thercs
argument directly to the environment variable, e.g. ifAR
is already set in the environment as usual:instead of
Don't set
AR
globally with these options, since other typical Makefiles will be confused by it.