ld não pode encontrar -lgfortran

4

Estou tentando compilar o Knut (um programa de matemática) no Arch Linux com o CMake e estou recebendo o seguinte erro :

/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

Acredito que gfortran e quadmath estão instalados e os links também parecem estar corretos:

$ 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

Os mesmos arquivos .so também são encontrados em /usr/lib64 .

Eu tenho o gfortran versão 6.1.1. Eu não sei muito CMake então a única coisa que eu tentei mudar no comando cmake é adicionar -D CMAKE_PREFIX_PATH=/usr/lib , o que não ajudou.

Alguma sugestão de como eu poderia proceder para encontrar o problema?

EDIT1

Eu executei cmake sem o make subseqüente e parece que todas as dependências foram atendidas:

- 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

Os erros acima mencionados ocorrem quando, posteriormente, executo make .

EDIT2

Eu notei que o meu /usr/lib/gcc/x86_64-pc-linux-gnu/6.1.1/ não contém as bibliotecas estáticas libgfortran.a e libquadmath.a . Eu tenho gcc-4.8.5 em outro computador e existem esses arquivos. A partir da saída cmake , estas são as duas bibliotecas que não são encontradas, já que não há caminho para elas.

Agora eu não tenho certeza do que isso significa, se isso é um problema com a minha instalação do Gfortran ou algo mais?

EDIT3 24 de junho

O problema com o libgfortran parece ser específico do Arch. Bibliotecas aparentemente estáticas geralmente não são empacotadas no Arch. É por isso que o mesmo pacote gcc-fortran no Debian contém os arquivos libgfortran.a e libquadmath.a, mas não no Arch. Eu alterei as opções em PKGBUILD para options=('staticlibs') para incluir as bibliotecas estáticas para a próxima compilação (usando abs ). Então copiei os arquivos libgfortran.a e libquadmath.a gerados para /usr/lib/gcc/x86_64-pc-linux-gnu/6.1.1/ e o problema com libgfortran parece estar resolvido.

No entanto, estou recebendo agora o erro Qt5 mencionado por Knud Larsen.

    
por itsok-dontworry 16.06.2016 / 19:49

1 resposta

1

link

/usr/bin/ld: cannot find -lgfortran

/usr/bin/ld: cannot find -lquadmath

Por favor, leia knut / knut / knut.spec.cmake → Buildrequires: libgfortran-static .... ou seja, libgfortran. a

Provavelmente o mesmo para -lquadmath: libquadmath.a

(não recebo nenhum erro com a configuração do cmake: o Makefile é criado.)

EDIT 1, 23 de junho: O acima parece ser apenas um exemplo de configuração: o Makefile foi criado.

Exemplo (s) de compilação: PCLinuxOS 2016, CentOS 7, Fedora 24 estão falhando com erros do Qt5.

  • Debian 8 Jessie: Sem problemas, exceto por um erro de sintaxe gerado pelo cmake em knut/knut/build/src/config.h . $ make e # make install estão OK. O gfortran, g ++, é a versão 4.9.2. "libgfortran-4.9-dev" fornece libgfortran.a, libquadmath.a

EDIT 2, 23 de junho: Uma compilação com o Ubuntu 16.04 ... para testar um compilador posterior, o gcc-5.3.1 ...

cd knut/knut/build/ && CC=gcc-5 CXX=g++-5 FC=gfortran-5 cmake .. && make && sudo make install
  • Sem problemas ....

EDIT 3: Teste de knut com gcc / g ++ / gfortran version 6.1.1 → Alongamento do Debian 9.

CC=gcc-6 CXX=g++-6 FC=gfortran-6 cmake .. && make ; # make install
  • Também está OK.

EDIT 4: Construa os requisitos .. # apt-get install g++ libopenblas-dev libqt5svg5-dev

A conclusão que posso ter de todos os itens acima é que o Qt5 usado deve se encaixar. Pode haver diferença na configuração do Qt5? remendando? ... Eu não acho nenhuma diferença importante nos locais dos arquivos Qt5.

    
por 17.06.2016 / 11:34