我正在尝试安装SCIP优化套件版本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'方面是指什么,甚至不知道为什么会产生任何错误。任何有关此事的帮助将不胜感激。我真的很难过。
答案 0 :(得分:1)
更改:
AR = ar cr
ARFLAGS =
致:
ARFLAGS += cs
并且:
$(AR) $@ $(LIBXXX) $(ARFLAGS)
致:
$(AR) $(ARFLAGS) $@ $(LIBXXX)
ar
将被调用(man 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