将libgfortran与CMAKE链接的便携式方式

Portable way of linking libgfortran with CMAKE

本文关键字:便携式 方式 链接 CMAKE libgfortran      更新时间:2023-10-16

我的一个可执行文件需要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

编辑2:

现在,我只需要用户将libgfortran.a复制到他们的usrlocallib目录中

看起来你要么错过了 linux 发行版上的开发包,它应该安装.so链接,要么在 cmake 查找时缺少此类链接所在的路径。尝试找到libgfortran.so链接,通常它位于.so.3所在的同一位置,如果找不到它,请安装缺少的开发包,如果可以检查为什么该路径不包含在cmake中。