[Ipopt] Problem running Ipopt matlab interface
Stefan Vigerske
stefan at math.hu-berlin.de
Fri Jul 27 06:21:04 EDT 2012
Hi,
it seems to pick up the wrong IpoptConfig.h file.
It should take
/homes/numerik/paul/lib/Ipopt/include/coin/IpoptConfig.h, but it took
the one from /homes/numerik/paul/lib_src/CoinIpopt/Ipopt/src/Common/.
Can you confirm that /homes/numerik/paul/lib/Ipopt/lib/pkgconfig
contains an ipopt.pc file where the Cflags are such that they have
-I/homes/numerik/paul/lib/Ipopt/include/coin in the beginning.
Or the problem are all the paths in your pkg-config path that do not
belong there.
A workaround could be to change the matlab interface makefile to say only
INCL = -I/homes/numerik/paul/lib/Ipopt/include/coin
Stefan
On 07/27/2012 11:59 AM, Paul van Hoven wrote:
> Thanks for your quick reply. I noticed that I accidently used the
> wrong Makefile. Instead I now use the correct on that was create by
> the configure script. Unfortunately I still get an error that seems to
> be related to the fortran libraries but I'm not shure about that.
>
> This is what the Makefile looks like
> paul at gauss:~/lib_src/CoinIpopt/build/Ipopt/contrib/MatlabInterface/src>
> cat 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
> # readme.html file for more information.
>
> # 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 = /net/matlab/Matlab2011b
>
> # 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 = ${prefix}
> prefix = /homes/numerik/paul/lib/Ipopt
> libdir = ${exec_prefix}/lib64/coin
>
> CXX = /usr/site-local/bin/g++-4.2
> CXXFLAGS = -O3 -pipe -DNDEBUG -pedantic-errors -Wimplicit
> -Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith
> -Wwrite-strings -Wconversion -Wno-unknown-pragmas -fPIC -fexceptions
> -DFUNNY_LAPACK_FINT -DMATLAB_MEXFILE # -DMWINDEXISINT
> LDFLAGS = $(CXXFLAGS)
>
> COIN_HAS_PKGCONFIG = TRUE
> COIN_CXX_IS_CL = #TRUE
>
> # Include directories (we use the CYGPATH_W variables to allow
> compilation with Windows compilers)
> ifeq ($(COIN_HAS_PKGCONFIG), TRUE)
> INCL = `PKG_CONFIG_PATH=/homes/numerik/paul/lib/Ipopt/lib/pkgconfig::/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/ASL:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Blas:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Lapack:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/HSL:/homes/numerik/paul/lib_src/CoinIpopt/build/Ipopt:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/ASL:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Blas:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Lapack:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/HSL:/homes/numerik/paul/lib_src/CoinIpopt/build/Ipopt
> /usr/bin/pkg-config --cflags ipopt`
> else
> INCL = -I`$(CYGPATH_W) /homes/numerik/paul/lib/Ipopt/include/coin`
> endif
>
> # Linker flags
> ifeq ($(COIN_HAS_PKGCONFIG), TRUE)
> LIBS = `PKG_CONFIG_PATH=/homes/numerik/paul/lib/Ipopt/lib/pkgconfig::/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/ASL:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Blas:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Lapack:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/HSL:/homes/numerik/paul/lib_src/CoinIpopt/build/Ipopt:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/ASL:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Blas:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Lapack:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/HSL:/homes/numerik/paul/lib_src/CoinIpopt/build/Ipopt
> /usr/bin/pkg-config --libs ipopt`
> else
> ifeq ($(COIN_CXX_IS_CL), TRUE)
> LIBS = /link /libpath:`$(CYGPATH_W)
> /homes/numerik/paul/lib/Ipopt/lib/coin` libipopt.lib -llapack -lblas
> -lm -ldl
> else
> LIBS = -L/homes/numerik/paul/lib/Ipopt/lib/coin -lipopt -llapack
> -lblas -lm -ldl
> endif
> endif
>
> # The following is necessary under cygwin, if native compilers are used
> CYGPATH_W = echo
>
> MEXFLAGS = -v -cxx -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 = ../../../../../Ipopt/contrib/MatlabInterface/src
> 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 $@ $^
>
> %.o: %.cpp
> $(CXX) $(CXXFLAGS) $(INCL) -I$(MATLAB_HOME)/extern/include \
> -o $@ -c $^
>
> clean:
> rm -f $(OBJS) $(TARGET)
>
> distclean: clean
>
>
> And this is the output I get
> paul at gauss:~/lib_src/CoinIpopt/build/Ipopt/contrib/MatlabInterface/src> make
> /usr/site-local/bin/g++-4.2 -O3 -pipe -DNDEBUG -pedantic-errors
> -Wimplicit -Wparentheses -Wreturn-type -Wcast-qual -Wall
> -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas
> -fPIC -fexceptions -DFUNNY_LAPACK_FINT -DMATLAB_MEXFILE
> `PKG_CONFIG_PATH=/homes/numerik/paul/lib/Ipopt/lib/pkgconfig::/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/ASL:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Blas:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Lapack:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/HSL:/homes/numerik/paul/lib_src/CoinIpopt/build/Ipopt:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/ASL:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Blas:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/Lapack:/homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/HSL:/homes/numerik/paul/lib_src/CoinIpopt/build/Ipopt
> /usr/bin/pkg-config --cflags ipopt`
> -I/net/matlab/Matlab2011b/extern/include \
> -o matlabexception.o -c
> ../../../../../Ipopt/contrib/MatlabInterface/src/matlabexception.cpp
> In file included from
> /homes/numerik/paul/lib_src/CoinIpopt/Ipopt/src/Common/IpDebug.hpp:12,
> from
> /homes/numerik/paul/lib_src/CoinIpopt/Ipopt/src/Common/IpUtils.hpp:14,
> from
> ../../../../../Ipopt/contrib/MatlabInterface/src/matlabexception.cpp:10:
> /homes/numerik/paul/lib_src/CoinIpopt/Ipopt/src/Common/IpoptConfig.h:39:30:
> error: configall_system.h: No such file or directory
> In file included from
> /homes/numerik/paul/lib_src/CoinIpopt/Ipopt/src/Common/IpUtils.hpp:14,
> from
> ../../../../../Ipopt/contrib/MatlabInterface/src/matlabexception.cpp:10:
> /homes/numerik/paul/lib_src/CoinIpopt/Ipopt/src/Common/IpDebug.hpp:21:4:
> error: #error "don't have header file for assert"
> In file included from
> /homes/numerik/paul/lib_src/CoinIpopt/Ipopt/src/Common/IpDebug.hpp:12,
> from
> /homes/numerik/paul/lib_src/CoinIpopt/Ipopt/src/Common/IpUtils.hpp:14,
> from
> ../../../../../Ipopt/contrib/MatlabInterface/src/matlabexception.cpp:10:
> /homes/numerik/paul/lib_src/CoinIpopt/Ipopt/src/Common/IpoptConfig.h:102:
> error: 'FORTRAN_INTEGER_TYPE' does not name a type
> make: *** [matlabexception.o] Fehler 1
>
>
>
>
> 2012/7/26 Tony Kelman <kelman at berkeley.edu>:
>> Hi again. From your original email, it looks like you modified the makefile
>> for the Matlab interface a fair amount relative to what configure generated?
>> The line that appears to be causing a problem is
>>>
>>> -L/usr/site-local/lib/gcc/x86_64-unknown-linux-gnu/4.2.4 -lgfortran
>>
>>
>> This is leading mex to link against the 4.2.4 version of libgfortran, rather
>> than the 4.6 version that you compiled BLAS, LAPACK, and the HSL routines
>> with. I'm guessing that if gfortran-4.6 is in /usr/bin, then the libgfortran
>> that you want to link against is probably in
>> /usr/lib/gcc/x86_64-unknown-linux-gnu/4.6.something (possibly with the
>> 2nd-to-last folder named more specific depending on your distro), or maybe
>> just in /usr/lib[64].
>>
>> Usually pkg-config figures this all out for you and automatically links to
>> the right libraries. Was that method not working?
>>
>> -Tony
>>
>> -----Original Message----- From: Paul van Hoven
>> Sent: Thursday, July 26, 2012 2:34 AM
>> To: Tony Kelman
>> Cc: ipopt at list.coin-or.org
>> Subject: Re: [Ipopt] Problem running Ipopt matlab interface
>>
>>
>> Thanks for the answers. I built a static version of ipopt. But now I
>> get an error when compiling the Matlabinterface:
>>
>> This was my configure call for compiling ipopt:
>> ../configure --prefix=/homes/numerik/paul/lib/Ipopt \
>> CXX=/usr/site-local/bin/g++-4.2 \
>> CC=/usr/site-local/bin/gcc-4.2 \
>> F77=/usr/bin/gfortran-4.6 \
>> ADD_CXXFLAGS="-fPIC -fexceptions -DFUNNY_LAPACK_FINT" \
>> ADD_CFLAGS="-fPIC -fexceptions" \
>> ADD_FFLAGS="-fPIC -fexceptions" \
>> --with-matlab-home=/net/matlab/Matlab2011b \
>> LDFLAGS="-L/usr/lib64 -lblas_pic" \
>> -disable-shared
>>
>> Ipopt compiled fine, but when I try to compile the matlab interface I
>> get an error:
>> paul at gauss:~/lib_src/CoinIpopt/Ipopt/contrib/MatlabInterface/src> make
>> /usr/site-local/bin/g++-4.2 -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE
>> -DMWINDEXISINT -I/homes/numerik/paul/lib/Ipopt/include/coin
>> -I/net/matlab/Matlab2011b/extern/include -o matlabjournal.o -c
>> matlabjournal.cpp
>> /usr/site-local/bin/g++-4.2 -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE
>> -DMWINDEXISINT -I/homes/numerik/paul/lib/Ipopt/include/coin
>> -I/net/matlab/Matlab2011b/extern/include -o matlabexception.o -c
>> matlabexception.cpp
>> /usr/site-local/bin/g++-4.2 -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE
>> -DMWINDEXISINT -I/homes/numerik/paul/lib/Ipopt/include/coin
>> -I/net/matlab/Matlab2011b/extern/include -o matlabfunctionhandle.o -c
>> matlabfunctionhandle.cpp
>> /usr/site-local/bin/g++-4.2 -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE
>> -DMWINDEXISINT -I/homes/numerik/paul/lib/Ipopt/include/coin
>> -I/net/matlab/Matlab2011b/extern/include -o iterate.o -c iterate.cpp
>> /usr/site-local/bin/g++-4.2 -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE
>> -DMWINDEXISINT -I/homes/numerik/paul/lib/Ipopt/include/coin
>> -I/net/matlab/Matlab2011b/extern/include -o ipoptoptions.o -c
>> ipoptoptions.cpp
>> /usr/site-local/bin/g++-4.2 -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE
>> -DMWINDEXISINT -I/homes/numerik/paul/lib/Ipopt/include/coin
>> -I/net/matlab/Matlab2011b/extern/include -o options.o -c options.cpp
>> /usr/site-local/bin/g++-4.2 -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE
>> -DMWINDEXISINT -I/homes/numerik/paul/lib/Ipopt/include/coin
>> -I/net/matlab/Matlab2011b/extern/include -o sparsematrix.o -c
>> sparsematrix.cpp
>> /usr/site-local/bin/g++-4.2 -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE
>> -DMWINDEXISINT -I/homes/numerik/paul/lib/Ipopt/include/coin
>> -I/net/matlab/Matlab2011b/extern/include -o callbackfunctions.o -c
>> callbackfunctions.cpp
>> /usr/site-local/bin/g++-4.2 -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE
>> -DMWINDEXISINT -I/homes/numerik/paul/lib/Ipopt/include/coin
>> -I/net/matlab/Matlab2011b/extern/include -o matlabinfo.o -c
>> matlabinfo.cpp
>> /usr/site-local/bin/g++-4.2 -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE
>> -DMWINDEXISINT -I/homes/numerik/paul/lib/Ipopt/include/coin
>> -I/net/matlab/Matlab2011b/extern/include -o matlabprogram.o -c
>> matlabprogram.cpp
>> /usr/site-local/bin/g++-4.2 -fPIC -DMX_COMPAT_32 -DMATLAB_MEX_FILE
>> -DMWINDEXISINT -I/homes/numerik/paul/lib/Ipopt/include/coin
>> -I/net/matlab/Matlab2011b/extern/include -o ipopt.o -c ipopt.cpp
>> /net/matlab/Matlab2011b/bin/mex -cxx CC='/usr/site-local/bin/g++-4.2'
>> CXX='/usr/site-local/bin/g++-4.2' LD='/usr/site-local/bin/g++-4.2' -lm
>> -L/homes/numerik/paul/lib/Ipopt/lib64/coin -lipopt
>> -L/homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty -lcoinlapack
>> -lcoinblas -lcoinhsl -lamplsolver
>> -L/usr/site-local/lib/gcc/x86_64-unknown-linux-gnu/4.2.4 -lgfortran
>> -ldl -largeArrayDims -output ipopt.mexa64 matlabjournal.o
>> matlabexception.o matlabfunctionhandle.o iterate.o ipoptoptions.o
>> options.o sparsematrix.o callbackfunctions.o matlabinfo.o
>> matlabprogram.o ipopt.o
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinlapack.a(dlamch.o):
>> In function `dlamc2_':
>> dlamch.f:(.text+0x762): undefined reference to
>> `_gfortran_transfer_integer_write'
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinblas.a(xerbla.o):
>> In function `xerbla_':
>> xerbla.f:(.text+0x77): undefined reference to
>> `_gfortran_transfer_character_write'
>> xerbla.f:(.text+0x87): undefined reference to
>> `_gfortran_transfer_integer_write'
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinhsl.a(ma27ad.o):
>> In function `ma27od_':
>> ma27ad.f:(.text+0x2f86): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x2fa0): undefined reference to
>> `_gfortran_transfer_integer_write'
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinhsl.a(ma27ad.o):
>> In function `ma27nd_':
>> ma27ad.f:(.text+0x3834): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x3854): undefined reference to
>> `_gfortran_transfer_integer_write'
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinhsl.a(ma27ad.o):ma27ad.f:(.text+0x3873):
>> more undefined references to `_gfortran_transfer_integer_write' follow
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinhsl.a(ma27ad.o):
>> In function `ma27ad_':
>> ma27ad.f:(.text+0x722c): undefined reference to
>> `_gfortran_transfer_real_write'
>> ma27ad.f:(.text+0x723d): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x724e): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x725f): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x7270): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x7281): undefined reference to
>> `_gfortran_transfer_integer_write'
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinhsl.a(ma27ad.o):ma27ad.f:(.text+0x7292):
>> more undefined references to `_gfortran_transfer_integer_write' follow
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinhsl.a(ma27ad.o):
>> In function `ma27bd_':
>> ma27ad.f:(.text+0x7d05): undefined reference to
>> `_gfortran_transfer_real_write'
>> ma27ad.f:(.text+0x7dd5): undefined reference to
>> `_gfortran_transfer_real_write'
>> ma27ad.f:(.text+0x7dea): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x7dff): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x7efe): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x7ff6): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x80d6): undefined reference to
>> `_gfortran_transfer_integer_write'
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinhsl.a(ma27ad.o):ma27ad.f:(.text+0x81bb):
>> more undefined references to `_gfortran_transfer_integer_write' follow
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinhsl.a(ma27ad.o):
>> In function `ma27bd_':
>> ma27ad.f:(.text+0x8686): undefined reference to
>> `_gfortran_transfer_real_write'
>> ma27ad.f:(.text+0x8766): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x87e5): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x8a9e): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x8b21): undefined reference to
>> `_gfortran_transfer_character_write'
>> ma27ad.f:(.text+0x8bad): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x8c2e): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x8cbf): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x8d43): undefined reference to
>> `_gfortran_transfer_integer_write'
>> ma27ad.f:(.text+0x8dba): undefined reference to
>> `_gfortran_transfer_integer_write'
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinhsl.a(ma27ad.o):ma27ad.f:(.text+0x8e9b):
>> more undefined references to `_gfortran_transfer_integer_write' follow
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinhsl.a(ma27ad.o):
>> In function `ma27cd_':
>> ma27ad.f:(.text+0x931e): undefined reference to
>> `_gfortran_transfer_real_write'
>> ma27ad.f:(.text+0x940d): undefined reference to
>> `_gfortran_transfer_real_write'
>> ma27ad.f:(.text+0x9626): undefined reference to
>> `_gfortran_transfer_real_write'
>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinhsl.a(mc19ad.o):
>> In function `mc19ad_':
>> mc19ad.f:(.text+0x2c0): undefined reference to
>> `_gfortran_transfer_integer_write'
>> mc19ad.f:(.text+0x2da): undefined reference to
>> `_gfortran_transfer_integer_write'
>> mc19ad.f:(.text+0x2f4): undefined reference to
>> `_gfortran_transfer_integer_write'
>> mc19ad.f:(.text+0xf87): undefined reference to
>> `_gfortran_transfer_integer_write'
>> collect2: ld returned 1 exit status
>>
>> mex: link of ' "ipopt.mexa64"' failed.
>>
>> make: *** [ipopt.mexa64] Fehler 1
>>
>>
>>
>>
>> 2012/7/7 Tony Kelman <kelman at berkeley.edu>:
>>>
>>> Paul,
>>>
>>> It looks like the Mathworks recommended compiler for R2011b is
>>> GCC/gfortran
>>> 4.3, see http://www.mathworks.com/support/compilers/R2011b/glnxa64.html.
>>> Successful compilation of the mex file and a working Matlab interface are
>>> a
>>> bit different, unfortunately.
>>>
>>> I've noticed this issue with Matlab, it loads its own set of .so libraries
>>> which are not always compatible with what you compiled Ipopt against.
>>> Particularly since you used F77=/usr/bin/gfortran-4.6 to compile Ipopt
>>> (and
>>> the ThirdParty sources like Lapack). Before you go to the trouble of
>>> switching to GCC/gfortran 4.3 though, will you be needing a shared Ipopt
>>> library file, or do you just want to use the Matlab interface? If the
>>> latter, I recommend you compile Ipopt with static libraries by adding
>>> --disable-shared to the configure command.
>>>
>>> Since you are using the coinlapack and coinblas reference implementations,
>>> static libraries should also work around the namespace collisions
>>> (http://list.coin-or.org/pipermail/ipopt/2011-March/002376.html) and
>>> incompatible 32/64 bit integer API problem that will affect every linear
>>> solver that uses BLAS (all but MA27). If you need to use a shared-library
>>> BLAS, it is possible to force Matlab to use your BLAS library instead of
>>> its
>>> own by using the BLAS_VERSION environment variable, as formerly documented
>>> here:
>>>
>>> http://web.archive.org/web/20090615072921/http://www.mathworks.com/support/solutions/en/data/1-18QUC/
>>>
>>> Matlab also has its own MA57 library with an incompatible API to the
>>> version
>>> Ipopt uses, but the problem can be avoided by compiling libcoinhsl as a
>>> static library. If you require libcoinhsl to be a shared library you can
>>> force Matlab to load libcoinhsl.so before loading its own libmwma57.so by
>>> using the LD_PRELOAD environment variable, but then the Matlab command ldl
>>> will not function properly on sparse matrices.
>>>
>>> -Tony
>>>
>>> -----Original Message----- Date: Fri, 6 Jul 2012 13:19:13 +0200
>>> From: Paul van Hoven <paul.van.hoven at googlemail.com>
>>> To: ipopt mailing list <ipopt at list.coin-or.org>
>>> Subject: [Ipopt] Problem running Ipopt matlab interface
>>> Message-ID:
>>> <CANqzD4P00-EO9_aQ=8v9-QjGJDzU2cW+VooNc9ikoKTvEa8vLg at mail.gmail.com>
>>> Content-Type: text/plain; charset=ISO-8859-1
>>>
>>>
>>> Hi, I just successfully compiled and installed ipopt on a linux
>>> machine. Now I'd like to use the matlab interface. Actually everything
>>> works fine, the interface compiles fine without any errors or
>>> warnings, the compiler version GCC 4.2 works also fine with matlab so
>>> there is no warning as well, and the interface is correctly installed.
>>> But when I try to run a simple matlab demo app I get the following
>>> error:
>>>
>>>>> IpoptDemo.clusterRunme
>>>
>>>
>>> ------------------------------------------
>>> Invalid MEX-file
>>> '/homes/numerik/paul/lib/Ipopt/MatlabInterface/ipopt.mexa64':
>>> /net/matlab/Matlab2011b/bin/glnxa64/../../sys/os/glnxa64/libgfortran.so.3:
>>> version `GFORTRAN_1.4' not
>>> found (required by
>>> /homes/numerik/paul/lib/Ipopt/lib64/coin/ThirdParty/libcoinlapack.so.1)
>>>
>>> Error in IpoptDemo.runme (line 45)
>>> [x info] = ipopt(x0,funcs,options);
>>>
>>> Error in IpoptDemo.clusterRunme (line 9)
>>> IpoptDemo.runme;
>>>
>>>
>>> I'm not shure if it helps but these are the first lines of the
>>> makefile for the matlab interface:
>>>
>>> MATLAB_HOME =/net/matlab/Matlab2011b
>>> MEXSUFFIX =mexa64
>>> PATH_TO_IPOPT_COMPILATION= /homes/numerik/paul/lib/Ipopt
>>> SRCDIR =
>>> /homes/numerik/paul/lib_src/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
>>>
>>> MEXFLAGS = -cxx CC='$(CXX)' CXX='$(CXX)' LD='$(CXX)' -lm
>>> -L$(PATH_TO_IPOPT_COMPILATION)/lib64/coin -lipopt \
>>>
>>> -L$(PATH_TO_IPOPT_COMPILATION)/lib64/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)/lib64/coin -lipopt -largeArrayDims
>>>
>>>
>>> And this was the configure call for configuring ipopt:
>>> ../configure --prefix=/homes/numerik/paul/lib/Ipopt \
>>> CXX=/usr/site-local/bin/g++-4.2 \
>>> CC=/usr/site-local/bin/gcc-4.2 \
>>> F77=/usr/bin/gfortran-4.6 \
>>> ADD_CXXFLAGS="-fPIC -fexceptions -DFUNNY_LAPACK_FINT" \
>>> ADD_CFLAGS="-fPIC -fexceptions" \
>>> ADD_FFLAGS="-fPIC -fexceptions" \
>>> --with-matlab-home=/net/matlab/Matlab2011b
>>>
>>> This is what I did so far:
>>> 1. I checked that a file called "libgfortran.so.3" is in the directory
>>> "/net/matlab/Matlab2011b/bin/glnxa64/../../sys/os/glnxa64"
>>> 2. I added the path to the LD_LIBRARY_PATH which had no effect
>>> 3. I added an environment path in matlab itself by
>>> addpath('/net/matlab/Matlab2011b/bin/glnxa64/../../sys/os/glnxa64')
>>> which also had no effect.
>>> 4. A simple ipopt demo app written in c++ works fine. So I checked
>>> that the installed ipopt version works.
>>>
>>> Any suggestions how I could repair this problem?
>>>
>>>
>>> ------------------------------
>>>
>>>
>>> _______________________________________________
>>> Ipopt mailing list
>>> Ipopt at list.coin-or.org
>>> http://list.coin-or.org/mailman/listinfo/ipopt
>>>
>>>
>>> End of Ipopt Digest, Vol 91, Issue 4
>>> ************************************
>>
>>
>
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/ipopt
>
More information about the Ipopt
mailing list