ld는 -lgfortran을 찾을 수 없습니다

ld는 -lgfortran을 찾을 수 없습니다

컴파일하려고하는데크누트(수학 프로그램) CMake를 사용하는 Arch Linux에서 다음 오류가 발생합니다.

/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 명령에서 변경하려고 시도한 유일한 것은 add 였지만 -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 설치에 문제가 있는 건가요 아니면 다른 문제인가요?

6월 24일 3일 수정

libgfortran의 문제는 Arch에만 국한된 것 같습니다. 분명히 정적 라이브러리는 일반적으로 Arch에 패키지되어 있지 않습니다. 이것이 Debian의 동일한 gcc-fortran 패키지에 libgfortran.a 및 libquadmath.a 파일이 포함되어 있지만 Arch에는 포함되어 있지 않은 이유입니다. options=('staticlibs')다음에 컴파일할 때 정적 라이브러리를 포함하도록 PKGBUILD의 옵션을 변경했습니다 .복부 근육). 그런 다음 생성된 libgfortran.a 및 libquadmath.a 파일을 여기에 복사했는데 /usr/lib/gcc/x86_64-pc-linux-gnu/6.1.1/libgfortran 문제가 해결된 것 같았습니다.

그러나 이제 Knud Larsen이 언급한 Qt5 오류가 발생합니다.

답변1


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

/usr/bin/ld: 찾을 수 없음 -lgfortran

/usr/bin/ld: -lquadmath를 찾을 수 없음

knut/knut/knut.spec.cmake를 읽어보세요 → 빌드 요구 사항: libgfortran-static .... 이는 libgfortran입니다.

-lquadmath 다음과 동일할 수 있습니다: libquadmath.a

(내 cmake 구성에는 오류가 발생하지 않습니다. Makefile이 생성되었습니다.)


6월 23일 편집 1: 위의 내용은 단지 예제 구성인 것으로 보입니다. Makefile이 생성됩니다.

빌드 예: PCLinuxOS 2016, CentOS 7, Fedora 24가 Qt5 오류로 인해 실패합니다.

  • Debian 8 Jessie: 문제 없습니다. cmake가 knut/knut/build/src/config.h.$ make및 # 에서 make install작동한다는 점만 빼면요. gfortran과 g++의 버전은 4.9.2입니다. "libgfortran-4.9-dev"는 libgfortran.a, libquadmath.a를 제공합니다.

6월 23일 편집 2: 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 버전으로 knut 테스트6.1.1→ 데비안 9 확장.

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 파일 위치에는 중요한 차이점이 없습니다.

관련 정보