我正在尝试安装SCIP optimisation suite版本3.1.0

http://scip.zib.de/download.php?fname=scipoptsuite-3.1.0.tgz

该软件是通过在scipoptsuite-3.1.0目录中键入"make"命令来编译的。该软件包包含三个组成包(SCIP,soplex和zimpl)。有一个用于通用包(scipoptsuite)的makefile,也有一个用于三个组成包的makefile。当涉及到zimpl的编译时,我遇到了很大的困难。

尝试使用zimpl makefile中的代码进行编译时会发生错误。尝试生成一个库并将目标文件存储在该库中。

我现在将提供一些与问题相关的代码。

以下是一些关键定义:

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))

这里是导致错误的关键代码段:

$(LIBRARY): $(OBJDIR) $(LIBDIR) $(LIBXXX) 
        @echo "-> generating library $@"
        -rm -f $(LIBRARY)
        $(AR) $@ $(LIBXXX) $(ARFLAGS) 
        $(RANLIB) $@

它会生成以下错误消息:

** 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

我特别想提请您注意该段代码中的以下行:

ar: crs: No such file or directory

我不确定该行的"crs"方面指的是什么,甚至不知道为什么会产生任何错误。在这个问题上的任何帮助将不胜感激。在这一点上,我真的很难堪。

有帮助吗?

解决方案

改变 :

AR      =   ar cr
ARFLAGS =   

到 :

ARFLAGS += cs

和 :

$(AR) $@ $(LIBXXX) $(ARFLAGS)

到 :

$(AR) $(ARFLAGS) $@ $(LIBXXX)

ar 是这样调用的(人ar(1)):

ar [--plugin name] [-X32_64] [-]p[mod [relpos] [count]] [--target bfdname] archive [member...]

所以它的标志不能在命令行的末尾,如果没有这样标记,就像 -crs.

也, make 已经定义 $(AR)$(ARFLAGS) 对您来说,您无需再次指定它。

$ make -p | grep "^AR"
AR = ar
ARFLAGS = rv
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top