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

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.

>Solution :

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 asks ar 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:

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

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.

Leave a Reply