我的一个可执行文件需要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
目录
我在编辑中添加了更多内容。看起来CMAKE只搜索只包含'libgfortran.so.3'的'/ usr/lib/x86_64-linux-gnu /'。它不是在包含'libgfortran.a'和'libgfortran.so'的'/ usr/lib/gcc/x86_64-linux-gnu/4.8 /'中查找。 – Justin