[Ipopt] Problem running Ipopt matlab interface
Stefan Vigerske
stefan at math.hu-berlin.de
Fri Jul 27 09:08:37 EDT 2012
Hi,
no, there is no option in the configure script of Ipopt so far that
links against the gfortran libraries statically.
I think I send a workaround for this on 6th of July already:
"Hi,
the problem is that your Ipopt was build with a newer compiler than matlab.
Ipopt requires GFORTRAN_1.4 in libgfortran.so.3, but when run under
matlab, the fortran library from /net/matlab/Matlab2011b/sys/os/glnxa64
is used. This one does not have GFORTRAN_1.4 in it.
When I have such a problem, I usually move away the older fortran
library. I.e., try moving
/net/matlab/Matlab2011b/sys/os/glnxa64/libgfortran.so.3 to some place
that the dynamic library loader does not find.
Hopefully, matlab will also work fine with the newer libgfortran.so that
is installed in your system.
Stefan"
Stefan
On 07/27/2012 03:05 PM, Paul van Hoven wrote:
> Okay, thanks for the tips. It finally compiled. But again I get the
> same error message when I try to run a matlab script. So static
> compilation does not solve this problem:
>
> ------------------------------------------
> Invalid MEX-file '/homes/numerik/paul/lib/Ipopt/lib64/coin/ipopt.mexa64':
> /net/matlab/Matlab2011b/sys/os/glnxa64/libgfortran.so.3: version
> `GFORTRAN_1.4' not found (required by
> /homes/numerik/paul/lib/Ipopt/lib64/coin/ipopt.mexa64)
>
> Error in IpoptDemo.runme (line 48)
> [x info] = ipopt(x0,funcs,options);
>
> Error in IpoptDemo.clusterRunme (line 9)
> IpoptDemo.runme;
>
>
>
>
>
>
> 2012/7/27 Stefan Vigerske <stefan at math.hu-berlin.de>:
>> Hi,
>>
>> same problem as before.
>> Make LIBS explicit. I think it should be
>>
>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6
>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../lib64
>> -L/lib/../lib64 -L/usr/lib/../lib64
>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib
>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../..
>> -L/homes/numerik/paul/lib/Ipopt/lib/
>> -lipopt -lcoinhsl -llapack -lblas -ldl -lblas_pic -lgfortran -lm -lgcc_s
>> -lquadmath
>>
>> Stefan
>>
>>
>> On 07/27/2012 02:19 PM, Paul van Hoven wrote:
>>>
>>> Yeah, that helped. But now I get another compilation error which is
>>> also not clear to me
>>>
>>> -> mexopts.sh sourced from directory (DIR = $MATLAB/bin)
>>> FILE = /net/matlab/Matlab2011b/bin/mexopts.sh
>>> ----------------------------------------------------------------
>>> -> MATLAB = /net/matlab/Matlab2011b
>>> -> CC = /usr/site-local/bin/g++-4.2
>>> -> CC flags:
>>> CFLAGS = -ansi -D_GNU_SOURCE -fexceptions -fPIC
>>> -fno-omit-frame-pointer -pthread
>>> CDEBUGFLAGS = -g
>>> COPTIMFLAGS = -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
>>> CLIBS =
>>> -Wl,-rpath-link,/net/matlab/Matlab2011b/bin/glnxa64
>>> -L/net/matlab/Matlab2011b/bin/glnxa64 -lmx -lmex -lmat -lm -lstdc++
>>> arguments = -DMX_COMPAT_32
>>> -> CXX = /usr/site-local/bin/g++-4.2
>>> -> CXX flags:
>>> CXXFLAGS = -ansi -D_GNU_SOURCE -fPIC
>>> -fno-omit-frame-pointer -pthread
>>> CXXDEBUGFLAGS = -g
>>> CXXOPTIMFLAGS = -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
>>> CXXLIBS =
>>> -Wl,-rpath-link,/net/matlab/Matlab2011b/bin/glnxa64
>>> -L/net/matlab/Matlab2011b/bin/glnxa64 -lmx -lmex -lmat -lm
>>> arguments = -DMX_COMPAT_32
>>> -> FC = gfortran
>>> -> FC flags:
>>> FFLAGS = -fexceptions -fbackslash -fPIC
>>> -fno-omit-frame-pointer
>>> FDEBUGFLAGS = -g
>>> FOPTIMFLAGS = -O
>>> FLIBS =
>>> -Wl,-rpath-link,/net/matlab/Matlab2011b/bin/glnxa64
>>> -L/net/matlab/Matlab2011b/bin/glnxa64 -lmx -lmex -lmat -lm
>>> arguments = -DMX_COMPAT_32
>>> -> LD = /usr/site-local/bin/g++-4.2
>>> -> Link flags:
>>> LDFLAGS = -pthread -shared
>>>
>>> -Wl,--version-script,/net/matlab/Matlab2011b/extern/lib/glnxa64/mexFunction.map
>>> -Wl,--no-undefined
>>> LDDEBUGFLAGS = -g
>>> LDOPTIMFLAGS = -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
>>> LDEXTENSION = .mexa64
>>> arguments =
>>> /homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/HSL/libcoinhsl.la
>>>
>>> /homes/numerik/paul/lib_src/CoinIpopt/build/Ipopt/src/Interfaces/libipopt.la
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../lib64
>>> -L/lib/../lib64 -L/usr/lib/../lib64
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../.. -llapack -lblas -ldl
>>> -lblas_pic -lgfortran -lm -lgcc_s -lquadmath
>>> -> LDCXX =
>>> -> Link flags:
>>> LDCXXFLAGS =
>>> LDCXXDEBUGFLAGS =
>>> LDCXXOPTIMFLAGS =
>>> LDCXXEXTENSION =
>>> arguments =
>>> /homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/HSL/libcoinhsl.la
>>>
>>> /homes/numerik/paul/lib_src/CoinIpopt/build/Ipopt/src/Interfaces/libipopt.la
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../lib64
>>> -L/lib/../lib64 -L/usr/lib/../lib64
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../.. -llapack -lblas -ldl
>>> -lblas_pic -lgfortran -lm -lgcc_s -lquadmath
>>> ----------------------------------------------------------------
>>>
>>> -> /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 -pthread
>>> -shared
>>> -Wl,--version-script,/net/matlab/Matlab2011b/extern/lib/glnxa64/mexFunction.map
>>> -Wl,--no-undefined -o "ipopt.mexa64" "matlabexception.o"
>>> "matlabfunctionhandle.o" "matlabjournal.o" "iterate.o"
>>> "ipoptoptions.o" "options.o" "sparsematrix.o" "callbackfunctions.o"
>>> "matlabinfo.o" "matlabprogram.o" "ipopt.o"
>>> /homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/HSL/libcoinhsl.la
>>>
>>> /homes/numerik/paul/lib_src/CoinIpopt/build/Ipopt/src/Interfaces/libipopt.la
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../lib64
>>> -L/lib/../lib64 -L/usr/lib/../lib64
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib
>>> -L/usr/lib64/gcc/x86_64-suse-linux/4.6/../../.. -llapack -lblas -ldl
>>> -lblas_pic -lgfortran -lm -lgcc_s -lquadmath
>>> -Wl,-rpath-link,/net/matlab/Matlab2011b/bin/glnxa64
>>> -L/net/matlab/Matlab2011b/bin/glnxa64 -lmx -lmex -lmat -lm
>>>
>>> /homes/numerik/paul/lib_src/CoinIpopt/build/ThirdParty/HSL/libcoinhsl.la:
>>> file not recognized: File format not recognized
>>> collect2: ld returned 1 exit status
>>>
>>> mex: link of ' "ipopt.mexa64"' failed.
>>>
>>> make: *** [ipopt.mexa64] Fehler 1
>>>
>>> The file libcoinhsl.la definetly exists.
>>>
>>> 2012/7/27 Stefan Vigerske <stefan at math.hu-berlin.de>:
>>>>
>>>> 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