[Scip] compile linear solver to a shared library
Stefan Heinz
heinz at zib.de
Thu Feb 7 00:12:58 MET 2013
Hi Maxim
replace the Makefile of the LOP example with the attached and run
"make". That creates a static library in the lib folder of the example.
Using "make SHARED=true" creates a shared library. In the latter case
you need to run a "make clean" first.
Best Stefan
On 02/06/2013 01:54 AM, Maxim Pauk wrote:
> Hi,
>
> Could someone give me a hint,
> how makefile of linear ordering solver example could be modified,
> such that compilation would output a shared library instead of executable
> binary?
>
>
> ( I'm creating a R package of Gobnilp, which uses Scip libraries.
> So far I couldn't manage to compile it with R CMD SHLIB,
> so now I want to add an additional interface layer,
> that would load the program separately, as a shared library, precompiled
> separately; therefore my question )
>
> Kind wishes,
> Maxim
>
>
>
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> http://listserv.zib.de/mailman/listinfo/scip
-------------- next part --------------
#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#* *
#* This file is part of the program and library *
#* SCIP --- Solving Constraint Integer Programs *
#* *
#* Copyright (C) 2002-2013 Konrad-Zuse-Zentrum *
#* fuer Informationstechnik Berlin *
#* *
#* SCIP is distributed under the terms of the ZIB Academic Licence. *
#* *
#* You should have received a copy of the ZIB Academic License *
#* along with SCIP; see the file COPYING. If not email to scip at zib.de. *
#* *
#* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#@file Makefile
#@brief Makefile for C example project featuring a linear ordering solver
#@author Marc Pfetsch
#-----------------------------------------------------------------------------
# paths
#-----------------------------------------------------------------------------
SCIPDIR = ../..
#-----------------------------------------------------------------------------
# include default project Makefile from SCIP
#-----------------------------------------------------------------------------
include $(SCIPDIR)/make/make.project
#-----------------------------------------------------------------------------
# Main Program
#-----------------------------------------------------------------------------
MAINNAME = lop
LIBFILE = $(LIBDIR)/lib$(MAINNAME).$(BASE).$(LIBEXT)
MAINOBJ = cmain.o
LIBOBJ = probdata_lop.o cons_linearordering.o
MAINSRC = $(addprefix $(SRCDIR)/,$(MAINOBJ:.o=.c))
MAINDEP = $(SRCDIR)/depend.cmain.$(OPT)
MAIN = $(MAINNAME).$(BASE).$(LPS)$(EXEEXTENSION)
MAINFILE = $(BINDIR)/$(MAIN)
MAINSHORTLINK = $(BINDIR)/$(MAINNAME)
MAINOBJFILES = $(addprefix $(OBJDIR)/,$(MAINOBJ))
LIBOBJFILES = $(addprefix $(OBJDIR)/,$(LIBOBJ))
#-----------------------------------------------------------------------------
# Rules
#-----------------------------------------------------------------------------
ifeq ($(VERBOSE),false)
.SILENT: $(MAINFILE) $(MAINOBJFILES) $(LIBOBJFILES) $(MAINSHORTLINK) $(LIBFILE) $(OBJDIR)/genRandomLOPInstance.o
endif
.PHONY: all
all: $(SCIPDIR) $(MAINFILE) $(MAINSHORTLINK) $(LIBFILE)
.PHONY: lint
lint: $(MAINSRC)
-rm -f lint.out
$(SHELL) -ec 'for i in $^; \
do \
echo $$i; \
$(LINT) $(SCIPDIR)/lint/scip.lnt +os\(lint.out\) -u -zero \
$(FLAGS) -UNDEBUG -UWITH_READLINE -UROUNDING_FE $$i; \
done'
.PHONY: scip
scip:
@$(MAKE) -C $(SCIPDIR) libs $^
.PHONY: doc
doc:
@-(cd doc && ln -fs ../$(SCIPDIR)/doc/scip.css);
@-(cd doc && ln -fs ../$(SCIPDIR)/doc/pictures/scippy.png);
@-(cd doc && ln -fs ../$(SCIPDIR)/doc/pictures/miniscippy.png);
@-(cd doc && ln -fs ../$(SCIPDIR)/doc/scipfooter.html footer.html);
cd doc; $(DOXY) $(MAINNAME).dxy
$(MAINSHORTLINK): $(MAINFILE)
@rm -f $@
cd $(dir $@) && ln -s $(notdir $(MAINFILE)) $(notdir $@)
$(OBJDIR):
@-mkdir -p $(OBJDIR)
$(BINDIR):
@-mkdir -p $(BINDIR)
.PHONY: clean
clean: $(OBJDIR)
ifneq ($(OBJDIR),)
@-(rm -f $(OBJDIR)/*.o && rmdir $(OBJDIR));
@echo "-> remove main objective files"
endif
@-rm -f $(MAINFILE) $(MAINLINK) $(MAINSHORTLINK)
@echo "-> remove binary"
.PHONY: test
test: $(MAINFILE)
@-(cd check && ln -fs ../$(SCIPDIR)/check/evalcheck.sh);
@-(cd check && ln -fs ../$(SCIPDIR)/check/check.awk);
@-(cd check && ln -fs ../$(SCIPDIR)/check/getlastprob.awk);
cd check; \
$(SHELL) ./check.sh $(TEST) $(MAINFILE) $(SETTINGS) $(notdir $(MAINFILE)).$(HOSTNAME) $(TIME) $(NODES) $(MEM) $(THREADS) $(FEASTOL) $(DISPFREQ) $(CONTINUE) $(LOCK) "example" $(LPS) $(VALGRIND);
.PHONY: tags
tags:
rm -f TAGS; ctags -e src/*.c src/*.h $(SCIPDIR)/src/scip/*.c $(SCIPDIR)/src/scip/*.h;
.PHONY: depend
depend: $(SCIPDIR)
$(SHELL) -ec '$(DCC) $(FLAGS) $(DFLAGS) $(MAINSRC) \
| sed '\''s|^\([0-9A-Za-z\_]\{1,\}\)\.o *: *$(SRCDIR)/\([0-9A-Za-z\_]*\).c|$$\(OBJDIR\)/\2.o: $(SRCDIR)/\2.c|g'\'' \
>$(MAINDEP)'
-include $(MAINDEP)
# main target
$(MAINFILE): $(BINDIR) $(OBJDIR) $(SCIPLIBFILE) $(LPILIBFILE) $(NLPILIBFILE) $(MAINOBJFILES) $(LIBOBJFILES)
@echo "-> linking $@"
ifeq ($(VERBOSE),true)
$(LINKCXX) $(MAINOBJFILES) $(LIBOBJFILES) \
$(LINKCXX_L)$(SCIPDIR)/lib $(LINKCXX_l)$(SCIPLIB)$(LINKLIBSUFFIX) \
$(LINKCXX_l)$(OBJSCIPLIB)$(LINKLIBSUFFIX) $(LINKCXX_l)$(LPILIB)$(LINKLIBSUFFIX) $(LINKCXX_l)$(NLPILIB)$(LINKLIBSUFFIX) \
$(OFLAGS) $(LPSLDFLAGS) \
$(LDFLAGS) $(LINKCXX_o)$@
else
@$(LINKCXX) $(MAINOBJFILES) $(LIBOBJFILES) \
$(LINKCXX_L)$(SCIPDIR)/lib $(LINKCXX_l)$(SCIPLIB)$(LINKLIBSUFFIX) \
$(LINKCXX_l)$(OBJSCIPLIB)$(LINKLIBSUFFIX) $(LINKCXX_l)$(LPILIB)$(LINKLIBSUFFIX) $(LINKCXX_l)$(NLPILIB)$(LINKLIBSUFFIX) \
$(OFLAGS) $(LPSLDFLAGS) \
$(LDFLAGS) $(LINKCXX_o)$@
endif
$(LIBDIR):
@-mkdir -p $(LIBDIR)
$(LIBFILE): $(LIBDIR)
@echo "-> generating library $@"
-rm -f $@
$(LIBBUILD) $(LIBBUILDFLAGS) $(LIBBUILD_o)$@ $(LIBOBJFILES)
ifneq ($(RANLIB),)
$(RANLIB) $@
endif
# target for generating random instances
genRandomLOPInstance: $(BINDIR)/genRandomLOPInstance
$(BINDIR)/genRandomLOPInstance: $(BINDIR) $(OBJDIR) $(OBJDIR)/genRandomLOPInstance.o
@echo "-> linking $@"
ifeq ($(VERBOSE),true)
$(LINKCXX) $(OBJDIR)/genRandomLOPInstance.o $(OFLAGS) $(LINKCXX_o)$@
else
@$(LINKCXX) $(OBJDIR)/genRandomLOPInstance.o $(OFLAGS) $(LINKCXX_o)$@
endif
$(OBJDIR)/%.o: $(SRCDIR)/%.c
@echo "-> compiling $@"
$(CC) $(FLAGS) $(OFLAGS) $(BINOFLAGS) $(CFLAGS) -c $< $(CC_o)$@
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
@echo "-> compiling $@"
$(CXX) $(FLAGS) $(OFLAGS) $(BINOFLAGS) $(CXXFLAGS) -c $< $(CXX_o)$@
#---- EOF --------------------------------------------------------------------
More information about the Scip
mailing list