Arkansas:crs:El fichero o directorio no existe
Pregunta
Estoy intentando instalar la versión 3.1.0 del paquete de optimización SCIP.
http://scip.zib.de/download.php?fname=scipoptsuite-3.1.0.tgz
El software se compila escribiendo el comando 'make' en el directorio scipoptsuite-3.1.0.El paquete contiene tres paquetes constituyentes (SCIP, soplex y zimpl).Hay un archivo MAKE para el paquete general (scipoptsuite) y también un archivo MAKE para los tres paquetes constituyentes.Estoy teniendo grandes dificultades a la hora de compilar zimpl.
El error ocurre al intentar compilar usando el código dentro del archivo MAKE zimpl.Se intenta generar una biblioteca y almacenar archivos objeto dentro de esa biblioteca.
Ahora voy a proporcionar parte del código relevante para el problema.
Aquí hay algunas definiciones clave:
AR = ar cr
ARFLAGS =
RANLIB = ranlib
LIBBASE = blkmem.o bound.o code.o conname.o define.o elem.o entry.o \
hash.o heap.o idxset.o inst.o iread.o list.o \
load.o local.o metaio.o mmlparse2.o mmlscan.o mono.o \
mshell.o prog.o random.o rdefpar.o source.o \
setempty.o setpseudo.o setlist.o setrange.o setprod.o \
setmulti.o set4.o stmt.o stkchk.o strstore2.o symbol.o \
term2.o tuple.o vinst.o zimpllib.o
LIBDIR = lib
LIBRARY = $(LIBDIR)/lib$(LIBNAME).a
LIBNAME = $(NAME)-$(VERSION).$(BASE)
OBJDIR = obj/O.$(OSTYPE).$(ARCH).$(COMP).$(LINK).$(OPT)
LIBOBJ = $(LIBBASE) gmpmisc.o numbgmp.o
LIBXXX = $(addprefix $(OBJDIR)/,$(LIBOBJ))
Y aquí está el segmento clave de código que causa el error:
$(LIBRARY): $(OBJDIR) $(LIBDIR) $(LIBXXX)
@echo "-> generating library $@"
-rm -f $(LIBRARY)
$(AR) $@ $(LIBXXX) $(ARFLAGS)
$(RANLIB) $@
Lo que genera el siguiente mensaje de error:
** Building ZIMPL library "mypath/scipoptsuite-3.1.0/zimpl-3.3.2/lib/libzimpl.linux.arm.gnu.opt.a".
make[2]: Entering directory `mypath/scipoptsuite-3.1.0/zimpl-3.3.2'
-> generating library lib/libzimpl-3.3.2.linux.arm.gnu.opt.a
ar: crs: No such file or directory
make[2]: *** [lib/libzimpl-3.3.2.linux.arm.gnu.opt.a] Error 1
make[2]: Leaving directory `mypath/scipoptsuite-3.1.0/zimpl-3.3.2'
make[1]: *** [mypath/scipoptsuite-3.1.0/zimpl-3.3.2/lib/libzimpl.linux.arm.gnu.opt.a] Error 2
make[1]: Leaving directory `mypath/scipoptsuite-3.1.0'
make: *** [scipbinary] Error 2
En particular, me gustaría llamar su atención sobre la siguiente línea dentro de ese segmento de código:
ar: crs: No such file or directory
No estoy realmente seguro de a qué se refiere el aspecto 'crs' de esa línea, ni siquiera de por qué se genera algún error.Cualquier ayuda en este asunto sería muy apreciada.Estoy realmente perplejo en este punto.
Solución
Cambiar :
AR = ar cr
ARFLAGS =
A :
ARFLAGS += cs
Y :
$(AR) $@ $(LIBXXX) $(ARFLAGS)
A :
$(AR) $(ARFLAGS) $@ $(LIBXXX)
ar
debe ser invocado así (hombre ar(1)):
ar [--plugin name] [-X32_64] [-]p[mod [relpos] [count]] [--target bfdname] archive [member...]
Entonces sus banderas no pueden estar al final de la línea de comando si no están marcadas como tales, como -crs
.
También, make
ya defino $(AR)
y $(ARFLAGS)
para usted, no es necesario que lo vuelva a especificar.
$ make -p | grep "^AR"
AR = ar
ARFLAGS = rv