[英]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.