[Ipopt] Error message when using the matlab interface
Paul van Hoven
paul.van.hoven at googlemail.com
Mon Feb 28 10:27:15 EST 2011
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.
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
>>
More information about the Ipopt
mailing list