我的一个可执行文件需要libgfortran.so
。通常我只是将-lgfortran
开关添加到编译行,它会自动与g++
链接。但是,我正在尝试使用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)
会在libfftw3.a
中找到/usr/local/lib
细)。
编辑:
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
目录
答案 0 :(得分:1)
看起来你要么想念linux发行版上的dev包,要么安装.so
链接,或者当cmake查找时缺少这样的链接所在的路径。尝试查找libgfortran.so
链接,通常它位于.so.3
所在的位置,如果您找不到它,请安装缺少的开发包,如果您可以检查为什么该路径未包含在cmake中。