2015-06-19 87 views
2

我的一個可執行文件需要libgfortran.so。通常,我只需將-lgfortran開關添加到編譯行,並與g++自動鏈接。不過,我想用找到與C進行庫:鏈接libgfortran與CMAKE的便攜方式

find_library(GFORTRAN_LIBRARY NAMES gfortran) 
target_link_libraries(ncorr_test ${GFORTRAN_LIBRARY}) 

然而,這未能在找到庫。原來只是到目前爲止已經工作的方式,如果我包括整個圖書館的名字,像這樣:

find_library(GFORTRAN_LIBRARY NAMES libgfortran.so.3) 
target_link_libraries(ncorr_test ${GFORTRAN_LIBRARY}) 

然後,它會正確鏈接:

/usr/bin/c++ ... /usr/lib/x86_64-linux-gnu/libgfortran.so.3 ... 

然而,包括整個.so.3是不是很便攜。有誰知道更好的方法來做到這一點?通常我需要使用的庫僅安裝在/usr/local/lib中,並且在不使用「lib」和擴展名的情況下搜索庫名(即find_library(FFTW_LIBRARY NAMES fftw3)將在/usr/local/lib中找到libfftw3.a就好)。

編輯:

find_library(GFORTRAN_LIBRARY NAMES libgfortran.so)也不起作用。到目前爲止,只有libgfortran.so.3已經工作。

使用locate libgfortran輸出:

/usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a 
/usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.so 
/usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.spec 
/usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortranbegin.a 
/usr/lib/x86_64-linux-gnu/libgfortran.so.3 
/usr/lib/x86_64-linux-gnu/libgfortran.so.3.0.0 
/usr/local/MATLAB/R2014a/sys/os/glnxa64/libgfortran.so.3 
/usr/local/MATLAB/R2014a/sys/os/glnxa64/libgfortran.so.3.0.0 
/usr/share/doc/libgfortran-4.8-dev 
/usr/share/doc/libgfortran3 
/var/lib/dpkg/info/libgfortran-4.8-dev:amd64.list 
/var/lib/dpkg/info/libgfortran-4.8-dev:amd64.md5sums 
/var/lib/dpkg/info/libgfortran3:amd64.list 
/var/lib/dpkg/info/libgfortran3:amd64.md5sums 
/var/lib/dpkg/info/libgfortran3:amd64.postinst 
/var/lib/dpkg/info/libgfortran3:amd64.postrm 
/var/lib/dpkg/info/libgfortran3:amd64.shlibs 
/var/lib/dpkg/info/libgfortran3:amd64.symbols 

EDIT2:

現在我只是需要用戶通過複製libgfortran.a他們usr\local\lib目錄

回答

1

看起來像你要麼錯過開發打包在你的linux發行版上,它應該安裝.so鏈接,或者當cmake查找時缺少這樣的鏈接所在的路徑。嘗試找到lingfortran.so鏈接,通常它位於.so.3所在的相同位置,如果您無法找到它安裝缺少的開發包,如果您可以檢查爲什麼該路徑不包含在cmake中。

+0

我在編輯中添加了更多內容。看起來CMAKE只搜索只包含'libgfortran.so.3'的'/ usr/lib/x86_64-linux-gnu /'。它不是在包含'libgfortran.a'和'libgfortran.so'的'/ usr/lib/gcc/x86_64-linux-gnu/4.8 /'中查找。 – Justin