[Ipopt] IPOPT build causes crash inside MATLAB

Tony Kelman kelman at berkeley.edu
Wed Jan 14 07:00:09 EST 2015

Matlab’s own copy of BLAS uses 64-bit integers. Ipopt and most other libraries expect conventional 32-bit integers in BLAS. You need to link Ipopt to a static-library BLAS to avoid this problem, otherwise there are two shared-library copies of BLAS opened by the same process using the same function names but binary-incompatible signatures and bad things happen. You can alternately tell Matlab to use the same copy of BLAS that you built with Ipopt by setting BLAS_VERSION environment variables, but this is not well-supported and could easily slow unrelated linear algebra down if you’re not using an optimized implementation.


From: Joel Andersson 
Sent: Wednesday, January 14, 2015 3:40 AM
To: Ipopt - Mailing list 
Subject: [Ipopt] IPOPT build causes crash inside MATLAB

Hello all, 

I am working on adding a MATLAB front-end to CasADi that will enable formulating and solving large-scale NLPs with efficient automatic calculation of Jacobians and Hessians.

I am experiencing problems of getting our IPOPT plugin to work inside MATLAB. While it appears to work fine in OS X, I get segfaults in Linux (Ubuntu 14.04, 64-bit, gcc 4.7) with the following stack trace:

Stack Trace (from fault):
[  0] 0x00007f607282eb0c        /usr/local/MATLAB/R2014b/bin/glnxa64/mkl.so+31877900 mkl_blas_cnr_def_xdcopy+00000252
[  1] 0x00007f6070ca3778        /usr/local/MATLAB/R2014b/bin/glnxa64/mkl.so+02996088 mkl_blas_dcopy+00000200
[  2] 0x00007f6070b1381c        /usr/local/MATLAB/R2014b/bin/glnxa64/mkl.so+01357852 dcopy+00000080
[  3] 0x00007f6074f76565                       /usr/local/lib/libipopt.so.0+01639781 _ZN5Ipopt11IpBlasDcopyEiPKdiPdi+00000085
[  4] 0x00007f6074e65762                       /usr/local/lib/libipopt.so.0+00522082 _ZN5Ipopt11TNLPAdapter16GetStartingPointENS_8SmartPtrINS_6VectorEEEbS3_bS3_bS3_bS3_b+00001106
[  5] 0x00007f6074ebdc78                       /usr/local/lib/libipopt.so.0+00883832 _ZN5Ipopt15GradientScaling30DetermineScalingParametersImplENS_8SmartPtrIKNS_11VectorSpaceEEES4_S4_NS1_IKNS_11MatrixSpaceEEES7_NS1_IKNS_14SymMatrixSpaceEEERKNS_6MatrixERKNS_6VectorESD_SG_RdRNS1_ISE_EESJ_SJ_+00000232

Anyone has any idea of what could be the cause of this or how it can be resolved? It appears to be related to BLAS which I find perplexing since IPOPT is not linked to the MEX function, but to a plugin (shared library) which is loaded dynamically using dlopen(..., RTLD_LAZY | RTLD_LOCAL). I thought that would provide enough encapsulation to avoid problems like this.

I tried building IPOPT explicitly avoid MKL blas by setting "--with-build=BUILD --with-lapack=BUILD":

../configure --prefix=/usr/local --with-build=BUILD --with-lapack=BUILD ADD_FFLAGS=-fPIC ADD_CFLAGS=-fPIC ADD_CXXFLAGS=-fPIC

But that doesn't appear to have any effect.

Best regards and thanks in advance,

Ipopt mailing list
Ipopt at list.coin-or.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.coin-or.org/pipermail/ipopt/attachments/20150114/5422a9b5/attachment.html>

More information about the Ipopt mailing list