저는 종종 gmp-6.1.2, mpfr-4.0.1, gcc-7.x 등 사용하기 위해 소스에서 다양한 라이브러리를 구축합니다. 이 작업을 수행할 때 나는 --prefix=/usr/local/gcc-7.2.0
이것이 설치된 위치를 정확히 알고 기존 라이브러리를 망칠 필요가 없도록 이것을 사용하는 것을 선호합니다 . 그렇다면 기본적으로 내가 아는 것은 make install
그것이 나에게 알려주는 마지막 것은 업데이트나 설정이라는 것입니다 LD_LIBRARY_PATH
. 때로는 항상 그런 것은 아닙니다 LD_RUN_PATH
.
대부분의 경우 LD_LIBRARY_PATH
나중에 필요에 따라 수동으로 설정하거나 비슷한 방식으로 전역적으로 설정했는데 /etc/bash.bashrc.local
효과가 있었습니다.
이는 다음을 의미합니다 make install
.
Libraries have been installed in:
/usr/local/mfprtest/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the 'LD_RUN_PATH' environment variable
during linking
- use the '-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to '/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
더 좋은 방법이 있을까요?아니면 좀 더 공식적인 방법인가요?using ldconfig and ld.so.conf
than using LD_LIBRARY_PATH
and LD_RUN_PATH
, and PATH
? 이것은 특히 내 자신의 코드를 작성하기 위한 것이지만 다른 사용자에게도 적용될 수 있습니다. gmp와 같이 특정 Linux 버전에 설치된 것보다 최신인 다양한 버전의 라이브러리에 연결하고 싶습니다. , mpfr, gcc-5.x, gcc-6.x 또는 gcc-7.x와 같이 수동으로 설치된 다양한 gcc 버전을 사용합니다.
예를 들어 , 기본적으로 일단 설치되면 /usr/local/gcc-7.3.0
나 자신과 시스템에서 홈브루 C, C++ 또는 포트란 소스 코드를 작성하거나 실행하는 다른 사람이 /usr/local/gcc-7.3.0
대신 /usr/bin/ 및 /usr/64/에 있는 시스템 저장소를 사용하기를 원합니다.
답변1
해결 방법은 라이브러리 디렉터리를 (또는 의 파일 ) /usr/local/gcc-7.3.0/lib/
에 추가하고 사용자의 셸 프로필을 실행하거나 변경하여 시스템의 /를 재정의하고 링커가 공유 개체를 찾을 수 있도록 별도의 항목을 추가하는 것입니다 ./etc/ld.so.conf
/etc/ld.so.conf.d/
ldconfig
LD_LIBRARY_PATH
LD_RUN_PATH
*/lib
라이브러리 추가를 시작하면 유지 관리의 복잡성이 증가하므로 이를 염두에 두십시오.
다른 옵션은 링크의 모든 파일을 링크하는 것입니다 /usr/local/<library>/{bin,lib,include} into /usr/local/{bin,lib,include}
. 이는 매우 단순화 ld.so.conf
되거나 LD_LIBRARY_PATH
/ LD_RUN_PATH
비록 당신이 혼란스러운 상황 속에서 살아야 할 필요가 있을지라도 말입니다 /usr/local/{bin,lib,include}
.
이를 수행하는 "공식적인" 방법은 시스템의 패키지 관리자를 사용하고 선택한 위치( 등)에 배포 라이브러리의 유지 관리 /usr/lib/
버전을 설치하는 것입니다 /lib
.
답변2
실행 파일(라이브러리와 반대)의 경우 사용자는 PATH
해당 환경에서 올바른 설정을 가져야 합니다. 이는 자체 쉘 시작 파일이나 via와 같은 시스템 전체 시작 파일을 통해 수행될 수 있습니다 /etc/profile
(그러나 이 파일은 모든 구성에서 읽을 수 있다고 보장되지는 않습니다).
이제 GMP 및 MPFR과 같은 라이브러리의 경우:
- GCC를 빌드할 때 실행 경로를 사용한 경우 GCC를 사용하기 위해 다른 작업을 수행할 필요가 없습니다. 라이브러리는 실행 경로를 통해 찾을 수 있습니다.
- 그렇지 않은 경우 또는 사용자가 다른 목적(예: 자체 소프트웨어 사용)으로 라이브러리를 직접 사용할 수 있도록 하려면
ldconfig
아마도 를 사용하는 것이/etc/ld.so.conf
가장 좋은 솔루션일 것입니다. 그러나 사용자가 이러한 라이브러리에 대해 컴파일하려면LIBRARY_PATH
및CPATH
(또는C_INCLUDE_PATH
등) 도 필요합니다.
참고: 임시 항목(예: 테스트) 및 사용자 홈 디렉터리에 설치된 라이브러리( 사용자 측 구성 LD_LIBRARY_PATH
에 해당하는 항목은 없는 것 같습니다)에는 여전히 유용합니다 . ldconfig
하지만 그건 가능해실행 경로 재정의, 이는 어떤 경우에는 문제가 될 수 있습니다(예: make check
방금 빌드된 라이브러리 및 이전 호환 버전이 이미 설치된 라이브러리 확인).