ld 找不到 -lgfortran
我正在嘗試使用 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.a
和libquadmath.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 文件位置有任何重要區別。