簡體   English   中英

gfortran LAPACK“未定義引用”錯誤

[英]gfortran LAPACK “undefined reference” error

我按照說明在Ubuntu上安裝了LAPACK,

sudo apt-get install liblapack-dev

因此我可以找到/usr/lib/libblas/libblas.a/usr/lib/lapack/liblapack.a ,然后使用randomsys1示例gfortran測試它,

  gfortran -llapack -lblas randomsys1.f90
  gfortran -llapack -L/usr/lib/lapack -lblas -L/usr/lib/libblas randomsys1.f90

但是我收到了以下錯誤( dgesv是一個LAPACK例程):

/tmp/ccnzuuiY.o: In function `MAIN__':
randomsys1.f90:(.text+0xb): undefined reference to `init_random_seed_'
randomsys1.f90:(.text+0x3c2): undefined reference to `dgesv_'
collect2: ld returned 1 exit status

安裝LAPACK有什么問題嗎? 非常感謝!

請參閱gcc / gfortran文檔

-llibrary-l library

鏈接時搜索名為library的庫。 (將庫作為單獨參數的第二種方法僅適用於POSIX,不建議使用。)

它在您編寫此選項的命令中有所不同; 鏈接器按照指定的順序搜索和處理庫和目標文件。 因此,'foo.o -lz bar.o'在文件foo.o之后但在bar.o之前搜索庫'z'。 如果bar.o引用'z'中的函數,則可能無法加載這些函數。

鏈接器搜索庫的標准目錄列表,該庫實際上是名為liblibrary.a的文件。 然后,鏈接器使用此文件,就好像它已按名稱精確指定一樣。

搜索的目錄包括幾個標准系統目錄以及您使用-L指定的任何目錄。

通常,以這種方式找到的文件是庫文件 - 歸檔文件,其成員是目標文件。 鏈接器通過掃描存檔文件來處理存檔文件,以查找已定義但尚未定義的符號的成員。 但是,如果找到的文件是普通的目標文件,則以通常的方式鏈接。 使用-l選項和指定文件名之間的唯一區別是-l使用'lib'和'.a'包圍庫並搜索多個目錄。

因此,您必須首先放置-L/directory/of/the/library以便編譯器知道包含您的庫的目錄, 然后-llibrary標志。

暫無
暫無

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

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