2015-06-19 88 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