سؤال

أحاول تثبيت الإصدار 3.1.0 من مجموعة تحسين SCIP

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

يتم تجميع البرنامج عن طريق كتابة الأمر "make" في الدليل scipoptsuite-3.1.0.تحتوي الحزمة على ثلاث حزم أساسية (SCIP، وsoplex، وzimpl).يوجد ملف تعريفي للحزمة العامة (scipoptsuite) وأيضًا ملف تعريفي للحزم الثلاث المكونة.أواجه صعوبات كبيرة عندما يتعلق الأمر بتجميع zimpl.

يحدث الخطأ عند محاولة الترجمة باستخدام التعليمات البرمجية الموجودة في ملف تعريف zimpl.توجد محاولة لإنشاء مكتبة وتخزين ملفات الكائنات داخل تلك المكتبة.

سأقوم الآن بتقديم بعض الأكواد ذات الصلة بالمشكلة.

فيما يلي بعض التعريفات الأساسية:

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 ليتم استدعاؤه بهذا الشكل (رجل ع(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