[Ipopt-tickets] [Ipopt] #264: mex: link of ' "ipopt.mexmaci64"' failed.

Ipopt coin-trac at coin-or.org
Tue Jul 7 07:13:06 EDT 2015


#264: mex: link of ' "ipopt.mexmaci64"' failed.
-----------------------+------------------------
Reporter:  asher       |      Owner:  ipopt-team
    Type:  defect      |     Status:  new
Priority:  normal      |  Component:  Ipopt
 Version:  3.12        |   Severity:  major
Keywords:  Ipopt, mac  |
-----------------------+------------------------
 Hi there,
 I have been trying to install ipopt on my mac for 2 weeks now:) and I
 think I've gotten pretty close.
 I followed this thread: http://list.coin-
 or.org/pipermail/ipopt/2011-October/002609.html
 But get stuck with this error:
 ld: symbol(s) not found for architecture x86_64
 clang: error: linker command failed with exit code 1 (use -v to see
 invocation)

     mex: link of ' "ipopt.mexmaci64"' failed.

 my mexopts.sh:

 {{{
 #
 # mexopts.sh    Shell script for configuring MEX-file creation script,
 #               mex.  These options were tested with the specified
 compiler.
 #
 # usage:        Do not call this file directly; it is sourced by the
 #               mex shell script.  Modify only if you don't like the
 #               defaults after running mex.  No spaces are allowed
 #               around the '=' in the variable assignment.
 #
 # Note: For the version of system compiler supported with this release,
 #       refer to the Supported and Compatible Compiler List at:
 #       http://www.mathworks.com/support/compilers/current_release/
 #
 #
 # SELECTION_TAGs occur in template option files and are used by MATLAB
 # tools, such as mex and mbuild, to determine the purpose of the contents
 # of an option file. These tags are only interpreted when preceded by '#'
 # and followed by ':'.
 #
 #SELECTION_TAG_MEX_OPT: Template Options file for building MEX-files
 #
 # Copyright 1984-2011 The MathWorks, Inc.
 # $Revision: 1.78.4.18 $  $Date: 2012/11/15 06:22:54 $
 #----------------------------------------------------------------------------
 #
     TMW_ROOT="$MATLAB"
     MFLAGS=''
     if [ "$ENTRYPOINT" = "mexLibrary" ]; then
         MLIBS="-L$TMW_ROOT/bin/$Arch -lmx -lmex -lmat -lmwservices -lut"
     else
         MLIBS="-L$TMW_ROOT/bin/$Arch -lmx -lmex -lmat"
     fi
     case "$Arch" in
         Undetermined)
 #----------------------------------------------------------------------------
 # Change this line if you need to specify the location of the MATLAB
 # root directory.  The script needs to know where to find utility
 # routines so that it can determine the architecture; therefore, this
 # assignment needs to be done while the architecture is still
 # undetermined.
 #----------------------------------------------------------------------------
             MATLAB="$MATLAB"
             ;;
         glnx86)
 #----------------------------------------------------------------------------
 echo "Error: Did not imbed 'options.sh' code"; exit 1 #imbed options.sh
 glnx86 12
 #----------------------------------------------------------------------------
             ;;
         glnxa64)
 #----------------------------------------------------------------------------
             RPATH="-Wl,-rpath-link,$TMW_ROOT/bin/$Arch"
             # StorageVersion: 1.0
             # CkeyName: GNU C
             # CkeyManufacturer: GNU
             # CkeyLanguage: C
             # CkeyVersion:
             # CkeyLinkerName: GNU ld
             # CkeyLinkerVersion:
             CC='gcc'
             CFLAGS='-ansi -D_GNU_SOURCE'
             CFLAGS="$CFLAGS  -fexceptions"
             CFLAGS="$CFLAGS -fPIC -fno-omit-frame-pointer -pthread"
             CLIBS="$RPATH $MLIBS -lm"
             COPTIMFLAGS='-O -DNDEBUG'
             CDEBUGFLAGS='-g'
             CLIBS="$CLIBS -lstdc++"
 #
             # C++keyName: GNU C++
             # C++keyManufacturer: GNU
             # C++keyLanguage: C++
             # C++keyVersion:
             # C++keyLinkerName: GNU ld
             # C++keyLinkerVersion:
             CXX='g++'
             CXXFLAGS='-ansi -D_GNU_SOURCE'
             CXXFLAGS="$CXXFLAGS -fPIC -fno-omit-frame-pointer -pthread"
             CXXLIBS="$RPATH $MLIBS -lm"
             CXXOPTIMFLAGS='-O -DNDEBUG'
             CXXDEBUGFLAGS='-g'
 #
             # FortrankeyName: gfortran
             # FortrankeyManufacturer: GNU
             # FortrankeyLanguage: Fortran
             # FortrankeyVersion:
             # FortrankeyLinkerName: GNU ld
             # FortrankeyLinkerVersion:
 #
             FC='gfortran'
             FFLAGS='-fexceptions -fbackslash'
             FFLAGS="$FFLAGS -fPIC -fno-omit-frame-pointer"
             FLIBS="$RPATH $MLIBS -lm"
             FOPTIMFLAGS='-O'
             FDEBUGFLAGS='-g'
 #
             LD="$COMPILER"
             LDEXTENSION='.mexa64'
             LDFLAGS="-pthread -shared -Wl,--version-
 script,$TMW_ROOT/extern/lib/$Arch/$MAPFILE -Wl,--no-undefined"
             LDOPTIMFLAGS='-O'
             LDDEBUGFLAGS='-g'
 #
             POSTLINK_CMDS=':'
 #----------------------------------------------------------------------------
             ;;
         sol64)
 #----------------------------------------------------------------------------
 echo "Error: Did not imbed 'options.sh' code"; exit 1 #imbed options.sh
 sol64 12
 #----------------------------------------------------------------------------
             ;;
         mac)
 #----------------------------------------------------------------------------
 echo "Error: Did not imbed 'options.sh' code"; exit 1 #imbed options.sh
 mac 12
 #----------------------------------------------------------------------------
             ;;
         maci)
 #----------------------------------------------------------------------------
 echo "Error: Did not imbed 'options.sh' code"; exit 1 #imbed options.sh
 maci 12
 #----------------------------------------------------------------------------
             ;;
         maci64)
 #----------------------------------------------------------------------------
             # StorageVersion: 1.0
             # CkeyName: Clang
             # CkeyManufacturer: Apple
             # CkeyLanguage: C
             # CkeyVersion:
             # CkeyLinkerName:
             # CkeyLinkerVersion:
             CC='xcrun  -sdk macosx10.7  clang'
 ## workaround clang defect temporarily use line below
 SDKROOT='/Developer/SDKs/MacOSX10.6.sdk'
 # compute SDK root on the fly
 # target 10.7
             MW_SDK_TEMP="find `xcode-select -print-path` -name
 MacOSX10.7.sdk"
             MW_SDKROOT=`$MW_SDK_TEMP`
             MACOSX_DEPLOYMENT_TARGET='10.7'
             ARCHS='x86_64'
             CFLAGS="-fno-common -mmacosx-version-
 min=$MACOSX_DEPLOYMENT_TARGET"
             CFLAGS="$CFLAGS  -fexceptions"
             CLIBS="$MLIBS"
             COPTIMFLAGS='-O2 -DNDEBUG'
             CDEBUGFLAGS='-g'
 #
             CLIBS="$CLIBS -lstdc++"
             # C++keyName: Clang++
             # C++keyManufacturer: Apple
             # C++keyLanguage: C++
             # C++keyVersion:
             # C++keyLinkerName:
             # C++keyLinkerVersion:
             CXX='xcrun  -sdk macosx10.7  clang++'
             CXXFLAGS="-fno-common -fexceptions -mmacosx-version-
 min=$MACOSX_DEPLOYMENT_TARGET"
             CXXLIBS="$MLIBS -lstdc++"
             CXXOPTIMFLAGS='-O2 -DNDEBUG'
             CXXDEBUGFLAGS='-g'
 #
             # FortrankeyName: GNU Fortran
             # FortrankeyManufacturer: GNU
             # FortrankeyLanguage: Fortran
             # FortrankeyVersion:
             # FortrankeyLinkerName:
             # FortrankeyLinkerVersion:
             FC='gfortran'
             FFLAGS='-fexceptions -m64 -fbackslash'
             FC_LIBDIR=`$FC -print-file-name=libgfortran.a 2>&1 | sed -n
 '1s/\/*libgfortran\.a//p'`
             FC_LIBDIR2=`$FC -print-file-name=libgfortranbegin.a 2>&1 | sed
 -n '1s/\/*libgfortranbegin\.a//p'`
             FLIBS="$MLIBS -L$FC_LIBDIR -lgfortran -L$FC_LIBDIR2
 -lgfortranbegin"
             FOPTIMFLAGS='-O'
             FDEBUGFLAGS='-g'
 #
             LD="$CC"
             LDEXTENSION='.mexmaci64'
             LDFLAGS=" -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET"
             LDFLAGS="$LDFLAGS -bundle
 -Wl,-exported_symbols_list,$TMW_ROOT/extern/lib/$Arch/$MAPFILE"
             LDFLAGS="$LDFLAGS -framework vecLib"
             LDOPTIMFLAGS='-O'
             LDDEBUGFLAGS='-g'
 #
             POSTLINK_CMDS=':'
 #----------------------------------------------------------------------------
             ;;
     esac
 #############################################################################
 #
 # Architecture independent lines:
 #
 #     Set and uncomment any lines which will apply to all architectures.
 #
 #----------------------------------------------------------------------------
 #           CC="$CC"
 #           CFLAGS="$CFLAGS"
 #           COPTIMFLAGS="$COPTIMFLAGS"
 #           CDEBUGFLAGS="$CDEBUGFLAGS"
 #           CLIBS="$CLIBS"
 #
 #           FC="$FC"
 #           FFLAGS="$FFLAGS"
 #           FOPTIMFLAGS="$FOPTIMFLAGS"
 #           FDEBUGFLAGS="$FDEBUGFLAGS"
 #           FLIBS="$FLIBS"
 #
 #           LD="$LD"
 #           LDFLAGS="$LDFLAGS"
 #           LDOPTIMFLAGS="$LDOPTIMFLAGS"
 #           LDDEBUGFLAGS="$LDDEBUGFLAGS"
 #----------------------------------------------------------------------------
 #############################################################################
 }}}

 and my makefile is:

 {{{
 # 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 = /Applications/Matlab_R2013a_Student.app

 # 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   = mexmaci64

 # 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      = /Users/ashermetzger/CoinIpopt/build
 libdir      = ${exec_prefix}/lib

 CXX         = clang++
 CXXFLAGS    = -O3 -pipe -DNDEBUG -Wparentheses -Wreturn-type -Wcast-qual
 -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas
 -Wno-long-long   -DIPOPT_BUILD -DMATLAB_MEXFILE # -DMWINDEXISINT
 LDFLAGS     = $(CXXFLAGS)   #-static-libgcc -static-libstdc++

 # Include directories (we use the CYGPATH_W variables to allow compilation
 with Windows compilers)
 INCL =
 `PKG_CONFIG_PATH=/Users/ashermetzger/CoinIpopt/build/lib64/pkgconfig:/Users/ashermetzger/CoinIpopt/build/lib/pkgconfig:/Users/ashermetzger/CoinIpopt/build/share/pkgconfig:
 pkg-config --cflags ipopt`
 #INCL = -I`$(CYGPATH_W) /Users/ashermetzger/CoinIpopt/build/include/coin`

 # Linker flags
 LIBS =
 `PKG_CONFIG_PATH=/Users/ashermetzger/CoinIpopt/build/lib64/pkgconfig:/Users/ashermetzger/CoinIpopt/build/lib/pkgconfig:/Users/ashermetzger/CoinIpopt/build/share/pkgconfig:
 pkg-config --libs ipopt | sed -e 's///g'`
 ##LIBS = -link -libpath:`$(CYGPATH_W)
 /Users/ashermetzger/CoinIpopt/build/lib` libipopt.lib -framework
 Accelerate -framework Accelerate -lm  -ldl
 #LIBS = -L/Users/ashermetzger/CoinIpopt/build/lib -lipopt `echo -framework
 Accelerate -framework Accelerate -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 = ../../../../../Ipopt/contrib/MatlabInterface/src
 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=clang++|' -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=clang++|' -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
 }}}

 I will appreciate any help. Thanks in advance, Asher.

--
Ticket URL: <https://projects.coin-or.org/Ipopt/ticket/264>
Ipopt <http://projects.coin-or.org/Ipopt>
Interior-point optimizer for nonlinear programs.



More information about the Ipopt-tickets mailing list