簡體   English   中英

在基於 LINUX 的環境中使用 LAPACK 和 C++

[英]Using LAPACK in LINUX based environment with C++

這是我的第一個問題:)

我想它沒有達到應有的資格,但這是我正在做的事情,如果能得到某人對此的意見會非常好。

我目前正在基於Linux的環境中使用LAPACK ,我對此感到非常困惑。 我正在嘗試使用C++但我也可以使用Python進行編碼。 首先,我在 HPC 中沒有 root,我連接到學校的服務器,所以我在軟件方面沒有我需要的靈活。

我可以編寫和編譯任何其他需要非常基本的 C++ 代碼,例如字符串等。 但是,我找不到一種方法來包含必要的東西或與 LAPACK 項目的鏈接。

例如: 用一個簡單的例子理解 C++ 中的 LAPACK 調用

//LAPACK test code
//compile with: g++ main.cpp -llapack -lblas -o testprog

#include <iostream>
#include <vector>

using namespace std;

extern "C" void dgetrf_(int* dim1, int* dim2, double* a, int* lda, int* ipiv, int* info);
extern "C" void dgetrs_(char *TRANS, int *N, int *NRHS, double *A, int *LDA, int *IPIV, double *B, int *LDB, int *INFO );


int main()
{
   char trans = 'N';
   int dim = 2;
   int nrhs = 1;
   int LDA = dim;
   int LDB = dim;
   int info;

   vector<double> a, b;

   a.push_back(1);
   a.push_back(1);
   a.push_back(1);
   a.push_back(-1);

   b.push_back(2);
   b.push_back(0);

   int ipiv[3];

   dgetrf_(&dim, &dim, &*a.begin(), &LDA, ipiv, &info);
   dgetrs_(&trans, &dim, &nrhs, & *a.begin(), &LDA, ipiv, & *b.begin(), &LDB, &info);


   std::cout << "solution is:";
   std::cout << "[" << b[0] << ", " << b[1] << ", " << "]" << std::endl;
   std::cout << "Info = " << info << std::endl;

   return(0);
}

這個論點非常接近我想要做的,用 LAPACK 解決一個基本系統。 當我嘗試在這里使用該代碼時,我面臨的錯誤是:

g++ main.cpp -llapack -lblas -o testprog
/cta/capps/lapack/3.9.0/lib/../lib/liblapack.a(xerbla.f.o): In function `xerbla_':
xerbla.f:(.text+0x49): undefined reference to `_gfortran_st_write'
xerbla.f:(.text+0x54): undefined reference to `_gfortran_string_len_trim'
xerbla.f:(.text+0x69): undefined reference to `_gfortran_transfer_character_write'
xerbla.f:(.text+0x79): undefined reference to `_gfortran_transfer_integer_write'
xerbla.f:(.text+0x81): undefined reference to `_gfortran_st_write_done'
xerbla.f:(.text+0x8a): undefined reference to `_gfortran_stop_string'
collect2: error: ld returned 1 exit status

我真的需要一些建議或資料來了解 LAPACK 背后的邏輯並將其與 C++ 聯系起來。

提前致謝...

LAPACK 寫在 fortran 中。 鏈接錯誤表明您的 LAPACK 版本是用 gfortran 編譯的,它有一個幫助程序(運行時)庫。 要擴展其他注釋,您需要鏈接此運行時庫以提供缺少的功能。 嘗試將 -lgfortran 添加到您的鏈接行(在 -lblas 之后),但在 -o 之前。 希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM