[Ipopt] Setting up MATLAB interface in Linux 64 bit
Gianpaolo Gulletta
gianpaologulletta at gmail.com
Tue Feb 17 16:26:23 EST 2015
Hello everybody,
I am having issues in compiling the source files in the
$IPOPTDIR/Ipopt/contrib/MatlabInterface/src folder.
Here the Makefile:
# Copyright (C) 2007, 2009 Peter Carbonetto. All Rights Reserved.
# This code is published under the Eclipse Public License.
#
# Author: Peter Carbonetto
# Dept. of Computer Science
# University of British Columbia
# May 19, 2007
# INSTRUCTIONS: Please modify the following few variables. See the
# Ipopt documentation (Ipopt/doc/documentation.pdf) for more details.
# This variable corresponds to the base directory of your MATLAB
# installation. This is the directory so that in its 'bin/'
# subdirectory you see all the matlab executables (such as 'matlab',
# 'mex', etc.)
MATLAB_HOME = /usr/local/MATLAB/R2012b
# 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
#MEX = "$(MATLAB_HOME)/sys/perl/win32/bin/perl" "`$(CYGPATH_W)
"$(MATLAB_HOME)/bin/mex.pl"`"
#############################################################################
# Do not modify anything below unless you know what you're doing.
exec_prefix = ${prefix}
prefix = /home/gianpaolo/Ipopt/install
libdir = ${exec_prefix}/lib
CXX = g++
CXXFLAGS = -O3 -pipe -DNDEBUG -pedantic-errors -Wparentheses
-Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings
-Wconversion -Wno-unknown-pragmas -Wno-long-long -DIPOPT_BUILD
-DMATLAB_MEXFILE # -DMWINDEXISINT
LDFLAGS = $(CXXFLAGS) -Wl,--rpath
-Wl,/home/gianpaolo/Ipopt/install/lib #-static-libgcc -static-libstdc++
# Include directories (we use the CYGPATH_W variables to allow
compilation with Windows compilers)
INCL =
`PKG_CONFIG_PATH=/home/gianpaolo/Ipopt/install/lib64/pkgconfig:/home/gianpaolo/Ipopt/install/lib/pkgconfig:/home/gianpaolo/Ipopt/install/share/pkgconfig:
pkg-config --cflags ipopt`
#INCL = -I`$(CYGPATH_W) /home/gianpaolo/Ipopt/install/include/coin`
# Linker flags
LIBS =
`PKG_CONFIG_PATH=/home/gianpaolo/Ipopt/install/lib64/pkgconfig:/home/gianpaolo/Ipopt/install/lib/pkgconfig:/home/gianpaolo/Ipopt/install/share/pkgconfig:
pkg-config --libs ipopt | sed -e 's/-framework vecLib//g'`
##LIBS = -link -libpath:`$(CYGPATH_W)
/home/gianpaolo/Ipopt/install/lib` libipopt.lib -lm -ldl
#LIBS = -L/home/gianpaolo/Ipopt/install/lib -lipopt `echo -lm -ldl |
sed -e 's/-framework vecLib//g'`
LIBS_STATIC = $(LIBS)
#LIBS_STATIC = $$(echo " $(LIBS) " | sed -e "s| -lgfortran |
`gfortran -print-file-name=libgfortran.a` |g" -e "s| -lquadmath |
`gfortran -print-file-name=libquadmath.a` |g")
##LIBS_STATIC = $$(echo " $(LIBS) " | sed -e 's|
-Wl,-Bdynamic,-lmwma57,-Bstatic | -lmwma57 |g')
# mex doesn't understand -Wl,-Bdynamic,-lmwma57,-Bstatic on Windows
# The following is necessary under cygwin, if native compilers are used
CYGPATH_W = echo
#MEXFLAGCXX =
MEXFLAGCXX = -cxx
MEXFLAGS = -v $(MEXFLAGCXX) -O CC="$(CXX)" CXX="$(CXX)"
LD="$(CXX)" \
COPTIMFLAGS="$(CXXFLAGS)" CXXOPTIMFLAGS="$(CXXFLAGS)" \
LDOPTIMFLAGS="$(LDFLAGS)"
TARGET = ipopt.$(MEXSUFFIX)
OBJS = matlabexception.o \
matlabfunctionhandle.o \
matlabjournal.o \
iterate.o \
ipoptoptions.o \
options.o \
sparsematrix.o \
callbackfunctions.o \
matlabinfo.o \
matlabprogram.o \
ipopt.o
SRCDIR = .
VPATH = $(SRCDIR)
all: $(TARGET)
install: $(TARGET)
if test -d $(libdir); then : ; else mkdir $(libdir); fi
cp $(SRCDIR)/../ipopt.m $(SRCDIR)/../ipopt_auxdata.m $(TARGET)
$(libdir)
uninstall:
rm -f $(libdir)/ipopt.m $(libdir)/ipopt_auxdata.m
$(libdir)/ipopt.$(MEXSUFFIX)
$(TARGET): $(OBJS)
make mexopts
$(MEX) $(MEXFLAGS) $(LIBS_STATIC) -output $@ $^
%.o: %.cpp
../../../../libtool --tag=CXX --mode=compile \
$(CXX) $(CXXFLAGS) $(INCL) -I"$(MATLAB_HOME)/extern/include" \
-o $@ -c $^
clean:
rm -f $(OBJS) *.lo $(TARGET)
distclean: clean
GM_ADD_LIBS_STATIC =
#GM_ADD_LIBS_STATIC = GM_ADD_LIBS="-static $$GM_ADD_LIBS";
# make mexopts applies a set of fixes to mexopts.sh on Mac,
# or mexopts.bat on Windows (if that file was generated
# by Gnumex to use gcc via Cygwin or MinGW)
mexopts:
case `uname` in \
Darwin*) \
if ! test -e mexopts.sh; then \
sed -e 's/-arch $$ARCHS//g' \
$(MATLAB_HOME)/bin/mexopts.sh > mexopts.sh; \
SDKROOT=`grep -m1 'SDKROOT=' mexopts.sh | sed -e
's/SDKROOT=//g'`; \
if ! test -d $$SDKROOT; then \
sed -e 's/-arch $$ARCHS//g' \
-e 's/-isysroot $$SDKROOT//g' \
-e 's/-Wl,-syslibroot,$$SDKROOT//g' \
$(MATLAB_HOME)/bin/mexopts.sh > mexopts.sh; \
fi; \
fi \
;; \
MINGW*) \
if ! test -e mexopts.bat; then \
echo Warning: no mexopts.bat found. You will probably
need to run Gnumex to generate this file. Call \"make gnumex\" then
try again.; \
else \
libdirwin=$$(cd $(libdir); cmd /c 'for %i in (.) do @echo
%~fi' | sed 's|\\|/|g'); \
mingwlibdirwin=$$(cd /mingw/lib; cmd /c 'for %i in (.) do
@echo %~fi' | sed 's|\\|/|g'); \
GM_ADD_LIBS=$$(echo "-llibmx -llibmex -llibmat $(LIBS) " | \
sed -e "s| -L$(libdir) | -L$$libdirwin |g" \
-e "s| -L/mingw/lib | -L$$mingwlibdirwin |g"); \
$(GM_ADD_LIBS_STATIC) \
cp mexopts.bat mexopts.bat.orig; \
sed -e 's|COMPILER=gcc|COMPILER=g++|' -e
's|GM_MEXLANG=c$$|GM_MEXLANG=cxx|' \
-e "s|GM_ADD_LIBS=-llibmx -llibmex
-llibmat$$|GM_ADD_LIBS=$$GM_ADD_LIBS|" \
mexopts.bat.orig > mexopts.bat; \
fi \
;; \
CYGWIN*) \
if ! test -e mexopts.bat; then \
echo Warning: no mexopts.bat found. You will probably
need to run Gnumex to generate this file. Call \"make gnumex\" then
try again.; \
else \
libdirwin=`cygpath -m $(libdir)`; \
cyglibdirwin=`cygpath -m /usr/lib`; \
GM_ADD_LIBS=$$(echo "-llibmx -llibmex -llibmat $(LIBS) " | \
sed -e "s| -L$(libdir) | -L$$libdirwin |g" \
-e "s| -L/usr/lib/| -L$$cyglibdirwin/|g"); \
$(GM_ADD_LIBS_STATIC) \
cp mexopts.bat mexopts.bat.orig; \
sed -e 's|COMPILER=gcc|COMPILER=g++|' -e
's|GM_MEXLANG=c$$|GM_MEXLANG=cxx|' \
-e "s|GM_ADD_LIBS=-llibmx -llibmex
-llibmat$$|GM_ADD_LIBS=$$GM_ADD_LIBS|" \
mexopts.bat.orig > mexopts.bat; \
fi \
;; \
esac
# make gnumex opens a Matlab session and calls the Gnumex tool to
# generate mexopts.bat set up for using gcc via Cygwin or MinGW
gnumex:
if ! test -d "$(SRCDIR)/../gnumex"; then \
echo "Warning: no gnumex folder found. Run \"cd `dirname
$(SRCDIR)`; ./get.Gnumex\" first."; \
else \
GM_COMMANDS="oldpwd=pwd; cd $(SRCDIR)/../gnumex;
gnumex('startup'); \
gnumexopts=gnumex('defaults'); gnumexopts.precompath=[pwd
'\libdef']; \
gnumexopts.optfile=[oldpwd '\mexopts.bat'];"; \
case `uname` in \
MINGW*) \
echo Use gnumex in Matlab to create mexopts.bat file,
then close this new instance of Matlab.; \
"$(MATLAB_HOME)/bin/matlab" -wait -r "$$GM_COMMANDS \
gnumexopts.mingwpath=fileparts(gnumexopts.gfortpath);
gnumex('struct2fig',gnumexopts)" \
;; \
CYGWIN*) \
echo Use gnumex in Matlab to create mexopts.bat file,
then close this new instance of Matlab.; \
"$(MATLAB_HOME)/bin/matlab" -wait -r "$$GM_COMMANDS
gnumexopts.environ=3; gnumex('struct2fig',gnumexopts)" \
;; \
esac \
fi
Here the problem:
----------------------------------------------------------------
Warning: You are using gcc version "4.8.2-19ubuntu1)". The version
currently supported with MEX is "4.4.6".
For a list of currently supported compilers see:
http://www.mathworks.com/support/compilers/current_release/
*mex: matlabexception.o not a normal file or does not exist.*
make: *** [ipopt.mexa64] Error 1
I have just followed the guide at the link:
http://www.coin-or.org/Ipopt/documentation/node18.html and all the
previous steps were successful.
Can you help me?
Thank you,
Gianpaolo Gulletta
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/ipopt/attachments/20150217/45ee781a/attachment.html>
More information about the Ipopt
mailing list