[Ipopt] mex: link of ' "ipopt.mexmaci64"' failed.

Tony Kelman kelman at berkeley.edu
Sun Jul 12 15:45:22 EDT 2015


Do the posted binary mex files not work for you? Please post the entire 
error message, not just the very end. Which symbols are missing is the 
important part.


-----Original Message----- 
From: Asher Metzger
Sent: Saturday, July 11, 2015 11:16 AM
To: ipopt at list.coin-or.org
Subject: [Ipopt] mex: link of ' "ipopt.mexmaci64"' failed.



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.







_______________________________________________
Ipopt mailing list
Ipopt at list.coin-or.org
http://list.coin-or.org/mailman/listinfo/ipopt 



More information about the Ipopt mailing list