fix lapacke config
diff --git a/Eigen/Core b/Eigen/Core
index af71891..631d3df 100644
--- a/Eigen/Core
+++ b/Eigen/Core
@@ -155,6 +155,14 @@
   * \endcode
   */
 
+#ifdef EIGEN_USE_LAPACKE
+  #ifdef EIGEN_USE_MKL
+    #include "mkl_lapacke.h"
+  #else
+    #include "src/misc/lapacke.h"
+  #endif
+#endif
+
 #include "src/Core/util/Constants.h"
 #include "src/Core/util/Meta.h"
 #include "src/Core/util/Assert.h"
diff --git a/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h b/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
index 8a6ae9b..70df6db 100644
--- a/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
+++ b/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h
@@ -119,33 +119,30 @@
       ColPivHouseholderQR_LAPACKE_impl<MatrixType>::init(rows, cols, m_hCoeffs, m_colsPermutation, m_isInitialized, \
                                                          m_usePrescribedThreshold); }                               \
 
-    #define COLPIVQR_LAPACKE(EIGTYPE)          \
-      COLPIVQR_LAPACKE_COMPUTEINPLACE(EIGTYPE) \
-      COLPIVQR_LAPACKE_INIT(EIGTYPE)           \
+    #define COLPIVQR_LAPACKE(EIGTYPE)               \
+      COLPIVQR_LAPACKE_COMPUTEINPLACE(EIGTYPE)      \
+      COLPIVQR_LAPACKE_INIT(EIGTYPE)                \
+      COLPIVQR_LAPACKE_COMPUTEINPLACE(Ref<EIGTYPE>) \
+      COLPIVQR_LAPACKE_INIT(Ref<EIGTYPE>)           \
 
-    typedef Matrix<float, Dynamic, Dynamic, RowMajor> MatrixXfR;
-    typedef Matrix<double, Dynamic, Dynamic, RowMajor> MatrixXdR;
-    typedef Matrix<scomplex, Dynamic, Dynamic, RowMajor> MatrixXcfR;
-    typedef Matrix<dcomplex, Dynamic, Dynamic, RowMajor> MatrixXcdR;
+    typedef Matrix<float,                 Dynamic, Dynamic, ColMajor> MatrixXfC;
+    typedef Matrix<double,                Dynamic, Dynamic, ColMajor> MatrixXdC;
+    typedef Matrix<lapack_complex_float,  Dynamic, Dynamic, ColMajor> MatrixXcfC;
+    typedef Matrix<lapack_complex_double, Dynamic, Dynamic, ColMajor> MatrixXcdC;
+    typedef Matrix<float,                 Dynamic, Dynamic, RowMajor> MatrixXfR;
+    typedef Matrix<double,                Dynamic, Dynamic, RowMajor> MatrixXdR;
+    typedef Matrix<lapack_complex_float,  Dynamic, Dynamic, RowMajor> MatrixXcfR;
+    typedef Matrix<lapack_complex_double, Dynamic, Dynamic, RowMajor> MatrixXcdR;
 
-    COLPIVQR_LAPACKE(MatrixXf)
-    COLPIVQR_LAPACKE(MatrixXd)
-    COLPIVQR_LAPACKE(MatrixXcf)
-    COLPIVQR_LAPACKE(MatrixXcd)
+    COLPIVQR_LAPACKE(MatrixXfC)
+    COLPIVQR_LAPACKE(MatrixXdC)
+    COLPIVQR_LAPACKE(MatrixXcfC)
+    COLPIVQR_LAPACKE(MatrixXcdC)
     COLPIVQR_LAPACKE(MatrixXfR)
     COLPIVQR_LAPACKE(MatrixXdR)
     COLPIVQR_LAPACKE(MatrixXcfR)
     COLPIVQR_LAPACKE(MatrixXcdR)
 
-    COLPIVQR_LAPACKE(Ref<MatrixXf>)
-    COLPIVQR_LAPACKE(Ref<MatrixXd>)
-    COLPIVQR_LAPACKE(Ref<MatrixXcf>)
-    COLPIVQR_LAPACKE(Ref<MatrixXcd>)
-    COLPIVQR_LAPACKE(Ref<MatrixXfR>)
-    COLPIVQR_LAPACKE(Ref<MatrixXdR>)
-    COLPIVQR_LAPACKE(Ref<MatrixXcfR>)
-    COLPIVQR_LAPACKE(Ref<MatrixXcdR>)
-
 #endif
 }  // end namespace Eigen
 
diff --git a/Eigen/src/misc/lapacke.h b/Eigen/src/misc/lapacke.h
index 3d8e24f..c20204c 100644
--- a/Eigen/src/misc/lapacke.h
+++ b/Eigen/src/misc/lapacke.h
@@ -46,7 +46,11 @@
 #include <stdlib.h>
 
 #ifndef lapack_int
-#define lapack_int     int
+  #ifdef LAPACK_ILP64
+    #define lapack_int int64_t
+  #else
+    #define lapack_int int
+  #endif
 #endif
 
 #ifndef lapack_logical
@@ -72,8 +76,7 @@
 
 /* Complex type (single precision) */
 #ifndef lapack_complex_float
-#include <complex.h>
-#define lapack_complex_float    float _Complex
+#define lapack_complex_float std::complex<float>
 #endif
 
 #ifndef lapack_complex_float_real
@@ -88,8 +91,7 @@
 
 /* Complex type (double precision) */
 #ifndef lapack_complex_double
-#include <complex.h>
-#define lapack_complex_double   double _Complex
+#define lapack_complex_double std::complex<double>
 #endif
 
 #ifndef lapack_complex_double_real