[Ipopt] Error message when using the matlab interface
Stefan Vigerske
stefan at math.hu-berlin.de
Tue Mar 1 11:32:43 EST 2011
Hi,
> I followed exactly what you did, and it created a Makefile for me, as
> expected. So no problems there.
>
> Maybe it would help if you called configure directly from IPOPTDIR (
> type "configure" instead of "../configure"). Try that.
>
> Peter
>
> On Mon, 28 Feb 2011, Paul van Hoven wrote:
>
>> Hi Peter!
>>
>> I tried to build the matlab interface after I compiled Ipopt and installed
>> it.
>>
>> I think you mean $COINIPOPT/Ipopt/contrib/MatlabInterface or
>> Ipopt/contrib/MatlabInterface-Old instead of Ipopt/contrib/Matlab/src (this
>> one does not exist on my machine, even after compilation of ipopt). Within
>> the first directory I got the "src" folder that contains a Makefile.in. If I
>> execute configure in $COINIPOPT/build this way
>>
>> ../configure --prefix=/homes/numerik/hoven/Mex/Ipopt \
>> CXX=/usr/site-local/bin/g++-4.2 \
>> CC=/usr/site-local/bin/gcc-4.2 \
>> F77=/usr/site-local/bin/gfortran-4.2 \
>> ADD_CXXFLAGS="-fPIC -fexceptions" \
>> ADD_CFLAGS="-fPIC -fexceptions" \
>> ADD_FFLAGS="-fPIC -fexceptions" \
>> --with-matlab-home=/net/matlab/Matlab2009b
>>
>> make
>> make install
>>
>> The variable MATLAB_HOME in
>> $COINIPOPT/Ipopt/contrib/MatlabInterface/src/Makefile.in is correctly set but
>> the other variables remain undefined and the Makefile remains a Makefile.in
>> and I cannot execute it.
If you build in $COINIPOPT/build, then the Makefile should be in
$COINIPOPT/build/Ipopt/contrib/MatlabInterface/src.
Stefan
>>
>> After configure/make the Makefile looks like this:
>>
>> $COINIPOPT/Ipopt/contrib/MatlabInterface/src> cat Makefile.in
>> comments omitted...
>> MATLAB_HOME = /net/matlab/Matlab2009b
>>
>> # Set the suffix for matlab mex files. The contents of the
>> # $(MATLAB_HOME)/extern/examples/mex directory might be able to help
>> # you in your choice.
>> MEXSUFFIX = mexa64
>>
>> # This is the command used to call the mex program. Usually, it is
>> # just "mex". But it also may be something like
>> # /user/local/R2006b/bin/mex if "mex" doesn't work.
>> MEX = $(MATLAB_HOME)/bin/mex
>>
>> #############################################################################
>> # Do not modify anything below unless you know what you're doing.
>> exec_prefix = @exec_prefix@
>> prefix = @prefix@
>> libdir = @libdir@/coin
>>
>> CXX = @CXX@
>> CXXFLAGS = @CXXFLAGS@ -DMATLAB_MEXFILE # -DMWINDEXISINT
>> LDFLAGS = $(CXXFLAGS) @RPATH_FLAGS@
>>
>> COIN_HAS_PKGCONFIG = @COIN_HAS_PKGCONFIG_TRUE at TRUE
>> COIN_CXX_IS_CL = @COIN_CXX_IS_CL_TRUE at TRUE
>>
>> # Include directories (we use the CYGPATH_W variables to allow compilation
>> with Windows compilers)
>> ifeq ($(COIN_HAS_PKGCONFIG), TRUE)
>> INCL = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --cflags ipopt`
>> else
>> INCL = -I`$(CYGPATH_W) @abs_include_dir@/coin` @IPOPTLIB_CFLAGS_INSTALLED@
>> endif
>>
>> # Linker flags
>> ifeq ($(COIN_HAS_PKGCONFIG), TRUE)
>> LIBS = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --libs ipopt`
>> else
>> ifeq ($(COIN_CXX_IS_CL), TRUE)
>> LIBS = /link /libpath:`$(CYGPATH_W) @abs_lib_dir@` libipopt.lib
>> @IPOPTLIB_LIBS_INSTALLED@
>> else
>> LIBS = -L at abs_lib_dir@ -lipopt @IPOPTLIB_LIBS_INSTALLED@
>> endif
>> endif
>>
>> # The following is necessary under cygwin, if native compilers are used
>> CYGPATH_W = @CYGPATH_W@
>>
>> MEXFLAGS = -v -cxx -O CC="$(CXX)" CXX="$(CXX)" LD="$(CXX)" \
>> COPTIMFLAGS="$(CXXFLAGS)" CXXOPTIMFLAGS="$(CXXFLAGS)" \
>> LDOPTIMFLAGS="$(LDFLAGS)"
>>
>> TARGET = ipopt.$(MEXSUFFIX)
>> OBJS = matlabexception. at OBJEXT@ \
>> matlabfunctionhandle. at OBJEXT@ \
>> matlabjournal. at OBJEXT@ \
>> iterate. at OBJEXT@ \
>> ipoptoptions. at OBJEXT@ \
>> options. at OBJEXT@ \
>> sparsematrix. at OBJEXT@ \
>> callbackfunctions. at OBJEXT@ \
>> matlabinfo. at OBJEXT@ \
>> matlabprogram. at OBJEXT@ \
>> ipopt. at OBJEXT@
>>
>> SRCDIR = @srcdir@
>> VPATH = $(SRCDIR)
>>
>> all: $(TARGET)
>>
>> install: $(TARGET)
>> if test -d $(libdir); then : ; else mkdir $(libdir); fi
>> cp $(SRCDIR)/../ipopt.m $(TARGET) $(libdir)
>>
>> uninstall:
>> rm -f $(libdir)/ipopt.m $(libdir)/ipopt.$(MEXSUFFIX)
>>
>> $(TARGET): $(OBJS)
>> $(MEX) $(MEXFLAGS) $(LIBS) -output $@ $^
>>
>> %. at OBJEXT@: %.cpp
>> $(CXX) $(CXXFLAGS) $(INCL) -I$(MATLAB_HOME)/extern/include \
>> -o $@ -c $^
>>
>> clean:
>> rm -f $(OBJS) $(TARGET)
>>
>> distclean: clean
>>
>>
>>
>>
>> and the command make returns:
>>> make
>> make: *** No targets specified and no makefile found. Stop.
>>
>>
>> Paul
>>
>>
>> Peter Carbonetto schrieb:
>>> Paul,
>>>
>>> Normally when you build the IPOPT libraries, it will automatically
>>> create a Makefile in that Ipopt/contrib/Matlab/src directory, wherever you
>>> specified the target dirctory. Did you look in there after building the
>>> library?
>>>
>>> Peter Carbonetto, Ph.D.
>>> Postdoctoral Fellow
>>> Dept. of Human Genetics
>>> University of Chicago
>>>
>>>> I downloaded Ipopt and got it compiled on a Linux 64 bit machine. I put
>>>> the compiled Ipopt stuff into "~/Mex/Ipopt" which contains the following
>>>> subdirectories:
>>>> bin include lib share
>>>>
>>>> Since I use matlab 7.9 (2009b 64Bit) I wanted to compile the matlab
>>>> interface. The interface is located in
>>>> $COINOPT/Ipopt/contrib/MatlabInterface/src.
>>>> Within that directory should be a Makefile but instead I only found a
>>>> Makefile.in file which was completely useless since all variables in
>>>> that file weren't set. Therefore I created a Makefile on my own. This is
>>>> the Makefile:
>>>>
>>>> [MAKEFILE]
>>>> MATLAB_HOME = /net/matlab/Matlab2009b
>>>> MEXSUFFIX = mexa64
>>>> PATH_TO_IPOPT_COMPILATION=/homes/numerik/
>>
>>>> /Mex/Ipopt
>>>> SRCDIR = /homes/numerik/hoven/CoinIpopt/Ipopt/contrib/MatlabInterface/src
>>>>
>>>> ###############################################################################################
>>>> DESTINATION_DIR = $(PATH_TO_IPOPT_COMPILATION)/MatlabInterface
>>>> MEX = $(MATLAB_HOME)/bin/mex
>>>> #Pay attention to add a by your matlab version supported g++
>>>> CXX = /usr/site-local/bin/g++-4.2
>>>> CXXFLAGS = -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE -DMWINDEXISINT
>>>>
>>>> INCLUDES = -I$(PATH_TO_IPOPT_COMPILATION)/include/coin
>>>> -I$(MATLAB_HOME)/extern/include
>>>> #Static linking
>>>> MEXFLAGS = -cxx CC='$(CXX)' CXX='$(CXX)' LD='$(CXX)' -lm
>>>> -L$(PATH_TO_IPOPT_COMPILATION)/lib/coin -lipopt
>>>> -L$(PATH_TO_IPOPT_COMPILATION)/lib/coin/ThirdParty -lcoinlapack
>>>> -lcoinblas -lcoinhsl -lamplsolver \
>>>> -L/usr/site-local/lib/gcc/x86_64-unknown-linux-gnu/4.2.4
>>>> -lgfortran -ldl -largeArrayDims
>>>> #Dynamic linking
>>>> #MEXFLAGS = -cxx CC='$(CXX)' CXX='$(CXX)' LD='$(CXX)' -lm
>>>> -L$(PATH_TO_IPOPT_COMPILATION)/lib/coin -lipopt -largeArrayDims
>>>>
>>>> TARGET = ipopt.$(MEXSUFFIX)
>>>> OBJS = matlabjournal.o \
>>>> matlabexception.o \
>>>> matlabfunctionhandle.o \
>>>> iterate.o \
>>>> ipoptoptions.o \
>>>> options.o \
>>>> sparsematrix.o \
>>>> callbackfunctions.o \
>>>> matlabinfo.o \
>>>> matlabprogram.o \
>>>> ipopt.o
>>>>
>>>> all: $(TARGET)
>>>>
>>>> install: $(TARGET)
>>>> if test -d $(DESTINATION_DIR); then : ; else mkdir
>>>> $(DESTINATION_DIR); fi
>>>> cp $(SRCDIR)/../ipopt.m $(TARGET) $(DESTINATION_DIR)
>>>> cp -r $(SRCDIR)/../examples $(DESTINATION_DIR)
>>>>
>>>> uninstall:
>>>> rm -f $(DESTINATION_DIR)/ipopt.m
>>>> $(DESTINATION_DIR)/ipopt.$(MEXSUFFIX)
>>>>
>>>> $(TARGET): $(OBJS)
>>>> $(MEX) $(MEXFLAGS) -output $@ $^
>>>>
>>>> %.o: %.cpp
>>>> $(CXX) $(CXXFLAGS) $(INCLUDES) -o $@ -c $^
>>>>
>>>> clean:
>>>> rm -f $(OBJS) $(TARGET)
>>>>
>>>> distclean: clean
>>>> [/MAKEFILE]
>>>>
>>>> As you can see I used the setting static linking which I noticed makes
>>>> no difference to dynamic linking in terms of the error I encounter when
>>>> using matlab. Anyway the compilation process works fine and the matlab
>>>> interface is placed in a custom directory called "MatlabInterface"
>>>> underneth ~/Mex/Ipopt. The directory contents look like this:
>>>> ~/Mex/Ipopt/MatlabInterface> ls
>>>> examples ipopt.m ipopt.mexa64
>>>>
>>>> examples is a directory containing some matlab m-files for testing ipopt
>>>> matlab interface.
>>>>
>>>> Then I started matlab to run the test matlab program to check that the
>>>> interface works. So I did the following
>>>>
>>>> matlab -nodisplay(enter)
>>>>
>>>>
>>>> < M A T L A B (R) >
>>>>
>>>> Copyright 1984-2009 The MathWorks, Inc.
>>>>
>>>> Version 7.9.0.529 (R2009b) 64-bit (glnxa64)
>>>>
>>>> August 12, 2009
>>>>
>>>>
>>>> To get started, type one of these: helpwin, helpdesk, or demo.
>>>> For product information, visit www.mathworks.com.
>>>>
>>>>>> cd ~/Mex/Ipopt/MatlabInterface/examples/
>>>>>> pwd
>>>>
>>>> ans =
>>>>
>>>> /homes/numerik/hoven/Mex/Ipopt/MatlabInterface/examples
>>>>
>>>>>> addpath /homes/numerik/hoven/Mex/Ipopt/MatlabInterface
>>>>>> examplelasso
>>>>
>>>> ******************************************************************************
>>>> This program contains Ipopt, a library for large-scale nonlinear
>>>> optimization.
>>>> Ipopt is released as open source code under the Eclipse Public License
>>>> (EPL).
>>>> For more information visit http://projects.coin-or.org/Ipopt
>>>> ******************************************************************************
>>>>
>>>> This is Ipopt version 3.9.2, running with linear solver ma27.
>>>>
>>>> Function "mxGetJc_700" is obsolete in file "compat32.cpp", line 292.
>>>> (64-bit mex files using sparse matrices must be rebuilt with the
>>>> "-largeArrayDims" option. See the R2006b release notes for more details.)
>>>> Exception of type: IpoptException in file "Unknown File" at line -1:
>>>> Exception message: Unknown Exception caught in Ipopt
>>>> Solution:
>>>> 0
>>>> 0
>>>> 0
>>>> 0
>>>> 0
>>>> 0
>>>> 0
>>>> 0
>>>>
>>>>>>
>>>>
>>>> I find this message quite strange since I added the "-largeArrayDims"
>>>> option in the Mex compiler flags. Even so I get this error. Why?
>>>>
>>>> _______________________________________________
>>>> Ipopt mailing list
>>>> Ipopt at list.coin-or.org
>>>> http://list.coin-or.org/mailman/listinfo/ipopt
>>>>
>>
>>
>
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/ipopt
>
--
Stefan Vigerske
Humboldt University Berlin, Numerical Mathematics
http://www.math.hu-berlin.de/~stefan
More information about the Ipopt
mailing list