[Ipopt] help building Matlab interface for Ipopt on Mac
Ray Zimmerman
rz10 at cornell.edu
Wed Oct 5 13:48:31 EDT 2011
Thanks ... that seemed to eliminate the error about "-framework" not being a valid option, but now I'm getting "ld: library not found for -lgfortranbegin". I'm starting to think maybe there's an issue with my Fortran compiler since I can't even link the simple yprime example MEX file without getting errors related to -lgfortran.
Does anyone here have a working environment for building Fortran MEX files on Mac OS X (Snow Leopard or Lion)? I had a working setup with both g95 and gfortran (both from Fink) on a previous machine, but decided to go with what I thought was the more highly recommended Fortran installers from http://r.research.att.com/tools/. Now I can't the most basic MEX build to work.
Anybody have time to help me sort this out (off-list)?
I promise I'll post detailed instructions on how to build the IPOPT MEX interface on Mac if I ever succeed.
Thanks,
--
Ray Zimmerman
Senior Research Associate
419A Warren Hall, Cornell University, Ithaca, NY 14853
phone: (607) 255-9645
On Oct 4, 2011, at 2:43 PM, Thomas Vacek wrote:
> See comments below.
>
> /Applications/-math/MATLAB_R2011b.app//bin/mex -v -cxx -O CC="g++-4.0" CXX="g++-4.0" LD="g++-4.0" COPTIMFLAGS="-fno-common -no-cpp-precomp -fexceptions -arch x86_64 -m64 -DIPOPT_BUILD -DMATLAB_MEXFILE " CXXOPTIMFLAGS="-fno-common -no-cpp-precomp -fexceptions -arch x86_64 -m64 -DIPOPT_BUILD -DMATLAB_MEXFILE " LDOPTIMFLAGS="-fno-common -no-cpp-precomp -fexceptions -arch x86_64 -m64 -DIPOPT_BUILD -DMATLAB_MEXFILE "
>
> This part looks good to me, but I think the part that follows should be wrapped in a LDFLAGS="..." block, like this:
>
> LDFLAGS="-L/Users/ray/build/Ipopt-3.10.1/build/lib -lipopt -L/Users/ray/build/Ipopt-3.10.1/build/lib -lcoinmumps -lpthread -framework vecLib -L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64 -L/usr/lib/i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.. -lgfortranbegin -lgfortran -lSystem -L/Users/ray/build/Ipopt-3.10.1/build/lib -lcoinmetis -framework vecLib -framework vecLib -framework vecLib -lm -ldl"
>
> And then the remainder looks fine to me:
>
> -output ipopt.mexmaci64 matlabexception.o matlabfunctionhandle.o matlabjournal.o iterate.o ipoptoptions.o options.o sparsematrix.o callbackfunctions.o matlabinfo.o matlabprogram.o ipopt.o
>
> The "-framework vecLib" statement appears multiple times because the library dependencies are generated automatically by pkgconfig, and may contain repetitions. I hope something I said is helpful!
>
> Tom
>
> On 10/04/2011 11:39 AM, Ray Zimmerman wrote:
>>
>> I tried again with Matlab R2010a with the same result. Any ideas? Anyone?
>>
>> Thanks in advance,
>>
>> --
>> Ray Zimmerman
>> Senior Research Associate
>> 419A Warren Hall, Cornell University, Ithaca, NY 14853
>> phone: (607) 255-9645
>>
>>
>>
>>
>> On Sep 30, 2011, at 3:08 PM, Ray Zimmerman wrote:
>>
>>> I've finally gotten back to trying to build Ipopt and the Matlab interface on my Mac. I've been able to build Ipopt successfully, but I'm having trouble with the MEX build. Here is my setup ...
>>>
>>> OS X 10.6.8 Snow Leopard
>>> Ipopt-3.10.1
>>> gcc -v : gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)
>>> gfortran -v : gcc version 4.2.1 (Apple Inc. build 5664)
>>> (from http://r.research.att.com/tools/)
>>> Matlab R2011b (7.13)
>>>
>>> Using ...
>>>
>>> ../configure --with-blas="-framework vecLib" \
>>> --with-lapack="-framework vecLib" F77=gfortran \
>>> FFLAGS="-fexceptions -m64 -fbackslash" \
>>> CFLAGS="-fno-common -no-cpp-precomp -arch x86_64 -m64" \
>>> CXXFLAGS="-fno-common -no-cpp-precomp -fexceptions -arch x86_64 -m64" \
>>> -disable-shared CC=gcc-4.0 CXX=g++-4.0
>>>
>>> I added the following line to ~/.matlab/R2011b/mexopts.sh (from a Mar 9, 2010 posting by Peter)
>>> LDFLAGS="$LDFLAGS -framework vecLib"
>>>
>>> In Ipopt-3.10.1/build/Ipopt/contrib/MatlabInterface/src/Makefile
>>> MATLAB_HOME = /Applications/-math/MATLAB_R2011b.app/
>>> MEXSUFFIX = mexmaci64
>>>
>>>
>>> When I run 'make' for the MatlabInterface, I get the following:
>>>
>>> $ make
>>> /Applications/-math/MATLAB_R2011b.app//bin/mex -v -cxx -O CC="g++-4.0" CXX="g++-4.0" LD="g++-4.0" COPTIMFLAGS="-fno-common -no-cpp-precomp -fexceptions -arch x86_64 -m64 -DIPOPT_BUILD -DMATLAB_MEXFILE " CXXOPTIMFLAGS="-fno-common -no-cpp-precomp -fexceptions -arch x86_64 -m64 -DIPOPT_BUILD -DMATLAB_MEXFILE " LDOPTIMFLAGS="-fno-common -no-cpp-precomp -fexceptions -arch x86_64 -m64 -DIPOPT_BUILD -DMATLAB_MEXFILE " -L/Users/ray/build/Ipopt-3.10.1/build/lib -lipopt -L/Users/ray/build/Ipopt-3.10.1/build/lib -lcoinmumps -lpthread -framework vecLib -L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64 -L/usr/lib/i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../../i686-apple-darwin10/4.2.1 -L/usr/lib/gcc/i686-apple-darwin10/4.2.1/../../.. -lgfortranbegin -lgfortran -lSystem -L/Users/ray/build/Ipopt-3.10.1/build/lib -lcoinmetis -framework vecLib -framework vecLib -framework vecLib -lm -ldl -output ipopt.mexmaci64 matlabexception.o matlabfunctionhandle.o matlabjournal.o iterate.o ipoptoptions.o options.o sparsematrix.o callbackfunctions.o matlabinfo.o matlabprogram.o ipopt.o
>>> -> mexopts.sh sourced from directory (DIR = $PREF_DIR)
>>> FILE = /Users/ray/.matlab/R2011b/mexopts.sh
>>> ----------------------------------------------------------------
>>> -> MATLAB = /Applications/-math/MATLAB_R2011b.app
>>> -> CC = g++-4.0
>>> -> CC flags:
>>> CFLAGS = -fno-common -no-cpp-precomp -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -fexceptions
>>> CDEBUGFLAGS = -g
>>> COPTIMFLAGS = -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -m64 -DIPOPT_BUILD -DMATLAB_MEXFILE
>>> CLIBS = -L/Applications/-math/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lstdc++
>>> arguments = -DMX_COMPAT_32
>>> -> CXX = g++-4.0
>>> -> CXX flags:
>>> CXXFLAGS = -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5
>>> CXXDEBUGFLAGS = -g
>>> CXXOPTIMFLAGS = -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -m64 -DIPOPT_BUILD -DMATLAB_MEXFILE
>>> CXXLIBS = -L/Applications/-math/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lstdc++
>>> arguments = -DMX_COMPAT_32
>>> -> FC = gfortran
>>> -> FC flags:
>>> FFLAGS = -fexceptions -m64 -fbackslash
>>> FDEBUGFLAGS = -g
>>> FOPTIMFLAGS = -O
>>> FLIBS = -L/Applications/-math/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -L -lgfortran -L/usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64 -lgfortranbegin
>>> arguments = -DMX_COMPAT_32
>>> -> LD = g++-4.0
>>> -> Link flags:
>>> LDFLAGS = -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -bundle -Wl,-exported_symbols_list,/Applications/-math/MATLAB_R2011b.app/extern/lib/maci64/mexFunction.map -framework vecLib
>>> LDDEBUGFLAGS = -g
>>> LDOPTIMFLAGS = -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -m64 -DIPOPT_BUILD -DMATLAB_MEXFILE
>>> LDEXTENSION = .mexmaci64
>>> arguments = -L/Users/ray/build/Ipopt-3.10.1/build/lib -lipopt -L/Users/ray/build/Ipopt-3.10.1/build/lib -lcoinmumps -lpthread
>>> -> LDCXX =
>>> -> Link flags:
>>> LDCXXFLAGS =
>>> LDCXXDEBUGFLAGS =
>>> LDCXXOPTIMFLAGS =
>>> LDCXXEXTENSION =
>>> arguments = -L/Users/ray/build/Ipopt-3.10.1/build/lib -lipopt -L/Users/ray/build/Ipopt-3.10.1/build/lib -lcoinmumps -lpthread
>>> ----------------------------------------------------------------
>>>
>>>
>>> mex: -framework not a valid option.
>>>
>>> Usage:
>>> MEX [option1 ... optionN] sourcefile1 [... sourcefileN]
>>> [objectfile1 ... objectfileN] [libraryfile1 ... libraryfileN]
>>>
>>> Use the -help option for more information, or consult the MATLAB External Interfaces Guide.
>>>
>>> make: *** [ipopt.mexmaci64] Error 1
>>>
>>>
>>> So if I manually attempt to run the same call to mex, with all of the '-framework vecLib' entries removed (why are there 4 of them anyway)? Then I get the following error ...
>>>
>>> ld: library not found for -lgfortranbegin
>>> collect2: ld returned 1 exit status
>>>
>>> mex: link of ' "ipopt.mexmaci64"' failed.
>>>
>>> But I do have ...
>>> /usr/lib/gcc/i686-apple-darwin10/4.2.1/libgfortranbegin.a
>>> /usr/lib/gcc/i686-apple-darwin10/4.2.1/libgfortranbegin.la
>>> /usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64/libgfortranbegin.a
>>> /usr/lib/gcc/i686-apple-darwin10/4.2.1/x86_64/libgfortranbegin.la
>>>
>>> I'm guessing all I need is a nudge in the right direction. Any help is appreciated. By the way, once I am successful with this build, I hope to try it on OS X 10.7 Lion as well.
>>>
>>> Thanks,
>>>
>>>
>>> --
>>> Ray Zimmerman
>>> Senior Research Associate
>>> 419A Warren Hall, Cornell University, Ithaca, NY 14853
>>> phone: (607) 255-9645
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> 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
>
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/ipopt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/ipopt/attachments/20111005/b9beed0a/attachment-0001.html>
More information about the Ipopt
mailing list