Arch-Linux

ld 找不到 -lgfortran

  • June 25, 2016

我正在嘗試使用 CMake 在 Arch Linux 上編譯Knut(一個數學程序),但出現以下錯誤:

/usr/bin/ld: cannot find -lgfortran
/usr/bin/ld: cannot find -lquadmath
collect2: error: ld returned 1 exit status
make[2]: *** [cli/CMakeFiles/knut-cli.dir/build.make:101: cli/knut-cli] Error 1
make[1]: *** [CMakeFiles/Makefile2:498: cli/CMakeFiles/knut-cli.dir/all] Error 2
make: *** [Makefile:128: all] Error 2

我相信兩者gfortran都已quadmath安裝,並且連結似乎也是正確的:

$ ls -al /usr/lib | grep "fortran"
lrwxrwxrwx   1 root root       20 Jun  3 23:11 libgfortran.so -> libgfortran.so.3.0.0
lrwxrwxrwx   1 root root       20 Jun  3 23:11 libgfortran.so.3 -> libgfortran.so.3.0.0
-rwxr-xr-x   1 root root  5858448 Jun  3 23:11 libgfortran.so.3.0.0
-rw-r--r--   1 root root      269 Jun  3 03:11 libgfortran.spec

$ ls -al /usr/lib | grep "libquadmath"
lrwxrwxrwx   1 root root       20 Jun  3 23:11 libquadmath.so -> libquadmath.so.0.0.0
lrwxrwxrwx   1 root root       20 Jun  3 23:11 libquadmath.so.0 -> libquadmath.so.0.0.0
-rwxr-xr-x   1 root root   958384 Jun  3 23:11 libquadmath.so.0.0.0

在 .so 中也可以找到相同的 .so 文件/usr/lib64

我有 gfortran 6.1.1 版。我不太了解 CMake,所以我試圖在 cmake 命令中更改的唯一一件事就是添加-D CMAKE_PREFIX_PATH=/usr/lib,這沒有幫助。

有什麼建議我可以繼續找到問題嗎?

編輯1

我已經在cmake沒有後續的情況下執行了make,似乎所有依賴項都得到了滿足:

- The C compiler identification is GNU 6.1.1
-- The CXX compiler identification is GNU 6.1.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- The Fortran compiler identification is GNU 6.1.1
-- Check for working Fortran compiler: /usr/bin/gfortran
-- Check for working Fortran compiler: /usr/bin/gfortran  -- works
-- Detecting Fortran compiler ABI info
-- Detecting Fortran compiler ABI info - done
-- Checking whether /usr/bin/gfortran supports Fortran 90
-- Checking whether /usr/bin/gfortran supports Fortran 90 -- yes
-- The shell is found: /usr/bin/sh
-- The C++ runtime library is /usr/lib/gcc/x86_64-pc-linux-  gnu/6.1.1/../../../../lib/libstdc++.a
-- The FORTRAN runtime library is libgfortran.a, /usr/lib/gcc/x86_64-pc-linux-gnu/6.1.1/libgcc.a and libquadmath.a
-- The DYNAMIC FORTRAN runtime library is /usr/lib/gcc/x86_64-pc-linux-gnu/6.1.1/../../../../lib/libgfortran.so
-- openBLAS was found as /usr/lib64/libopenblas.so.
-- Using system UMFPACK and AMD: /usr/lib64/libumfpack.so and /usr/lib64/libamd.so.
-- The includes are at /usr/include and /usr/include.
-- Using system LAPACK and ARPACK /usr/lib64/liblapack.so;/usr/lib64/libarpack.so.
-- The mxml library is /usr/lib64/libmxml.so.
-- The mxml include directory is /usr/include.
-- --> Qt5Core found.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mark/knut/knut/build

當我隨後執行make.

編輯2

我注意到我的 /usr/lib/gcc/x86_64-pc-linux-gnu/6.1.1/ 不包含靜態庫libgfortran.alibquadmath.a. 我gcc-4.8.5在另一台電腦上,這些文件存在。從cmake輸出來看,這兩個庫似乎沒有找到,因為沒有為它們提供路徑。

現在我不確定這意味著什麼,這是我的 gfortran 安裝問題還是其他問題?

EDIT3 六月 24

libgfortran 的問題似乎是 Arch 特有的。顯然靜態庫通常不打包在 Arch 中。這就是為什麼 Debian 中相同的 gcc-fortran 軟體包包含文件 libgfortran.a 和 libquadmath.a 但在 Arch 中不包含文件。我已將 PKGBUILD 中的選項更改options=('staticlibs')為包含用於下一次編譯的靜態庫(使用abs)。然後我將生成的 libgfortran.a 和 libquadmath.a 文件複製到其中,libgfortran/usr/lib/gcc/x86_64-pc-linux-gnu/6.1.1/的問題似乎得到了解決。

但是,我現在得到了 Knud Larsen 提到的 Qt5 錯誤。


https://github.com/rs1909/knut/tree/master/knut

/usr/bin/ld: 找不到 -lgfortran

/usr/bin/ld: 找不到 -lquadmath

請閱讀 knut/knut/knut.spec.cmake → Buildrequires: libgfortran-static …. 即 libgfortran。一種

-lquadmath 可能相同:libquadmath.a

(我在配置 cmake 時沒有遇到任何錯誤:Makefile 已創建。)


編輯 1,6 月 23 日:以上似乎只是一個配置範例:創建了 Makefile。

建構範例:PCLinuxOS 2016、CentOS 7、Fedora 24 因 Qt5 錯誤而失敗。

  • Debian 8 Jessie:沒有問題,除了在knut/knut/build/src/config.h. $make和 #make install都可以。gfortran、g++ 是 4.9.2 版本。“libgfortran-4.9-dev”提供 libgfortran.a、libquadmath.a

編輯 2,6 月 23 日:使用 Ubuntu 16.04 建構 … 以嘗試更高版本的編譯器 gcc-5.3.1 …

cd knut/knut/build/ && CC=gcc-5 CXX=g++-5 FC=gfortran-5 cmake .. && make && sudo make install
  • 沒有問題 ….

編輯 3:使用 gcc/g++/gfortran 版本6.1.1 → Debian 9 Stretch 測試 knut。

CC=gcc-6 CXX=g++-6 FC=gfortran-6 cmake .. && make ; # make install
  • 也行。

編輯 4:建構要求 .. #apt-get install g++ libopenblas-dev libqt5svg5-dev

從以上所有內容我可以得出的結論是,使用過的 Qt5 必須適合。Qt5配置可能有區別嗎?修補?…我沒有發現 Qt5 文件位置有任何重要區別。

引用自:https://unix.stackexchange.com/questions/290221