CMakeを使用してArchLinuxで 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ファイルが_/usr/lib64
_にもあります。
私はgfortranバージョン6.1.1を持っています。私はCMakeをあまり知らないので、cmakeコマンドで変更しようとしたのは、_-D CMAKE_PREFIX_PATH=/usr/lib
_を追加することだけでしたが、役に立ちませんでした。
問題を見つけるためにどのように進めることができるかについての提案はありますか?
EDIT1
後続の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
を実行すると、前述のエラーが発生します。
EDIT2
/usr/lib/gcc/x86_64-pc-linux-gnu/6.1.1/に静的ライブラリ_libgfortran.a
_と_libquadmath.a
_が含まれていないことに気づきました。別のコンピューターに_gcc-4.8.5
_があり、これらのファイルが存在します。 cmake
出力から、これらはパスが指定されていないため、見つからない2つのライブラリのようです。
それが私のgfortranのインストールに問題があるのか、それとも他の問題なのか、それが何を意味するのかわかりません。
EDIT3 6月24日
Libgfortranの問題はArch固有のようです。どうやら静的ライブラリは通常Archにパッケージ化されていません。そのため、Debianの同じgcc-fortranパッケージにはlibgfortran.aファイルとlibquadmath.aファイルが含まれていますが、Archには含まれていません。 PKGBUILDのオプションをoptions=('staticlibs')
に変更して、次のコンパイル用の静的ライブラリを含めました( abs を使用)。次に、生成されたlibgfortran.aファイルとlibquadmath.aファイルを_/usr/lib/gcc/x86_64-pc-linux-gnu/6.1.1/
_にコピーすると、libgfortranの問題は解決されたようです。
しかし、KnudLarsenが言及した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。a
おそらく-lquadmathについても同じです:libquadmath.a
(cmakeの構成でエラーは発生しません:Makefileが作成されます。)
編集1、6月23日:上記は設定例にすぎないようです:Makefileが作成されました。
ビルド例:PCLinuxOS 2016、CentOS 7、Fedora24がQt5エラーで失敗しています。
knut/knut/build/src/config.h
でcmakeが生成した構文エラーを除いて問題はありません。 $ make
と#make install
はOKです。 gfortran、g ++はバージョン4.9.2です。 「libgfortran-4.9-dev」はlibgfortran.a、libquadmath.aを提供します編集2、6月23日:Ubuntu16.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でknutをテストする→Debian9ストレッチ。
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ファイルの場所に重要な違いはありません。