Windows 10 Can';无法让LAPACK在windows上运行
我正在尝试让LAPACK在windows上运行。我从netlib.org下载了3.8.0版,并使用CMAKE构建了库 我没有MSVC许可证,所以我使用的是mingw64。这是我的密码:Windows 10 Can';无法让LAPACK在windows上运行,windows-10,mingw,lapack,Windows 10,Mingw,Lapack,我正在尝试让LAPACK在windows上运行。我从netlib.org下载了3.8.0版,并使用CMAKE构建了库 我没有MSVC许可证,所以我使用的是mingw64。这是我的密码: #include "lapacke.h" #include <iostream> extern "C" { extern int LAPACKE_zgesv(int matrix_order, lapack_int n, lapack_int nrhs,
#include "lapacke.h"
#include <iostream>
extern "C" {
extern int LAPACKE_zgesv(int matrix_order, lapack_int n, lapack_int nrhs,
lapack_complex_double* a, lapack_int lda,
lapack_int* ipiv, lapack_complex_double* b,
lapack_int ldb );
}
using namespace std;
int main (int argc, char* argv[])
{
cout << "Hello 1" << endl;
/* Locals */
lapack_int n = 4, nrhs = 2, lda = 4, ldb = 2, info;
/* Local arrays */
lapack_int ipiv[4];
lapack_complex_double a[4*4] = {
{ 1.23, -5.50}, { 7.91, -5.38}, {-9.80, -4.86}, {-7.32, 7.57},
{-2.14, -1.12}, {-9.92, -0.79}, {-9.18, -1.12}, { 1.37, 0.43},
{-4.30, -7.10}, {-6.47, 2.52}, {-6.51, -2.67}, {-5.86, 7.38},
{ 1.27, 7.29}, { 8.90, 6.92}, {-8.82, 1.25}, { 5.41, 5.37}
};
lapack_complex_double b[2*4] = {
{ 8.33, -7.32}, {-6.11, -3.81},
{-6.18, -4.80}, { 0.14, -7.71},
{-5.71, -2.80}, { 1.41, 3.40},
{-1.60, 3.08}, { 8.54, -4.05}
};
info = LAPACKE_zgesv( LAPACK_ROW_MAJOR, n, nrhs, a, lda, ipiv, b, ldb );
cout << "Hello 2" << endl;
}
编译器运行时没有错误,但当我运行可执行文件时,没有得到任何输出。不执行程序开始和结束时的cout
s。当我用LAPACKE_zgesv
函数注释掉该行时,我确实从cout
s获得了输出
所以我不确定发生了什么。程序似乎注意到,由于某种原因,它找不到LAPACK函数,只是退出了,但没有任何抱怨。请从中尝试3.9.0版
对于我来说,这在MinGW-w64中构建得很好,尽管我必须在运行cmake
之前运行这些命令来修复以下内容中提到的问题:
好的,我知道问题是什么。我需要将libblas.dll、liblapack.dll和liblapacke.dll放在.exe所在的目录中。我之所以发现,是因为我尝试了黑色cmd shell来改变,这让我明白了。该死的Powershell认为没有必要对丢失的DLL说任何话。伙计
我还必须将libstdc++-6.dll、libgcc__seh-1.dll、libgfortran-5.dll、libquadmath-0.dll和libwinpthread-1.dll放在该目录中。通过添加-static libstdc++和-static libgcc,我可以静态链接前两个。其他三个是否有等效的静态指令?另外,我有静态的lapack libs。我必须指定哪些链接器命令来链接这些命令,以便所有内容都是静态的?如果我添加一个简单的-static,链接器会抱怨它找不到-llapacke,尽管它在那里。我用LAPACK 3.9.0尝试过。同样的事情,只要我在代码中加入一个LAPACK函数,程序就会终止,没有错误,也没有任何输出。你用的是什么?我很难找到预编译版本。我仍然在使用我的3.6.6版本。我想避免自己编译,我想这可能需要半天的时间来完成一切…我使用的是独立版本的MinGW-w64 GCC 10.2.0,我用CMake+Ninja构建了LAPACK。如果LAPACK对您不起作用,也许您应该尝试OpenBLAS()。好的,使用了mingw发行版,用它和我上面的代码编译了LAPACK,但仍然是相同的行为。我一定是做错了什么。你试过OpenBLAS吗?你不必复制DLL,只要确保它们的位置在
路径
环境变量中即可。对于.a
您应该将它们的位置添加到环境变量库路径中。
g++ minimal.cpp -I./Include -LLib -llapacke -o minimal.exe
patch -ulbf LAPACKE/src/lapacke_cgesvdq.c << EOF
@@ -72,4 +72,4 @@
}
- liwork = (lapack_int)iwork_query;
- lcwork = (lapack_int)cwork_query;
+ liwork = iwork_query;
+ lcwork = LAPACK_C2INT(cwork_query);
lrwork = (lapack_int)rwork_query;
EOF
patch -ulbf LAPACKE/src/lapacke_zgesvdq.c << EOF
@@ -72,4 +72,4 @@
}
- liwork = (lapack_int)iwork_query;
- lcwork = (lapack_int)cwork_query;
+ liwork = iwork_query;
+ lcwork = LAPACK_C2INT(cwork_query);
lrwork = (lapack_int)rwork_query;
EOF
Hello 1
Hello 2