소스에서 애플리케이션을 설치하려고 하는데 abc라고 부르는 공유 라이브러리가 필요합니다. 구성 프로세스는 에서 abc의 0.23 버전을 가리키는 libabc.so
심볼릭 링크를 발견했습니다 . 하지만 제가 설치하려는 프로젝트에는 최신 버전의 abc가 필요합니다. abc의 소스 코드를 다운로드하고 설치 과정을 따랐습니다 . 이제 abc 버전 이 설치되었습니다 . 그러나 설치 중인 응용 프로그램의 유틸리티는 여전히 abc 버전이 부족하여 설치를 계속할 수 없다고 불평합니다. 시스템에 설치된 abc를 0.23에서 0.24로 업그레이드하는 방법은 무엇입니까? 잠재적인 해커로서 나는 for의 심볼릭 링크를 변경하여 의 파일을 가리키도록 할 수 있다고 생각합니다 . 그러나 그것이 깨끗한 해결책은 아니라고 생각합니다. 또 다른 가능성은 어떻게든 설치자에게 알려주는 것입니다 . 가장 좋은 방법은 무엇입니까?/usr/lib
/usr/lib folder
0.24
(configure, make, make install)
0.24
/usr/local/lib
configure
0.23
/usr/lib/libabc.so
/usr/local/lib
/usr/local/lib
/usr/local/lib
구성 파일 중 하나가 에 나열되어 있습니다 /etc/ld.so.conf.d/
.
답변1
기본적으로 이것이 업그레이드이고 기존 프로그램도 0.24에 의존할 수 있는 경우 이전에 설치된 라이브러리를 새 프로그램으로 덮어쓰는 것이 좋습니다(이를 더 높은 수준의 "업그레이드"라고 합니다). 이 모든 것을 관리하려면 패키지 관리자를 사용하는 것이 더 좋지만 배포 저장소에서 소스 코드를 사용할 수 없는 일부 라이브러리를 발견할 수 있습니다.
기본적으로 수동으로 빌드된 라이브러리는 실행되지만 /usr/local/lib
이는 스크립트에 의해 결정됩니다 configure
. 그러나 가능한 경우 이를 변경할 수 있습니다.
$ ./configure --prefix=/usr
$ make
$ sudo make install
접두사 로 사용되면 라이브러리 개체는 , headers , 구성 등 /usr
으로 이동합니다 . 이는 기본적으로 이전 버전의 라이브러리를 덮어써야 합니다. 개발자가 올바르게 유지 관리하는 경우 두 버전의 파일이 동일한 이름을 가져야 하기 때문입니다./usr/lib
/usr/include
/usr/etc
.so
이제 0.23을 유지하려면(예를 들어 첫 번째 프로그램이 0.24를 처리하지 못하는 경우) /usr/local
마지막 configure
스크립트(0.24가 필요한 프로그램과 연결된 스크립트) 에 대한 새 라이브러리( at )의 경로를 지정해야 합니다. ).
대부분의 경우 configure
스크립트는 이러한 상황에 처한 사람들이 설치할 때 특정할 수 있도록 라이브러리 경로를 지정하는 스위치를 제공합니다. 이러한 스위치 목록은 를 통해 표시되어야 합니다 ./configure --help
. 귀하의 경우 표준에 따르면 이러한 스위치는 --with-libabc
다음 중 하나로 호출되어야 합니다 --with-abc
.
$ ./configure --with-libabc=/usr/local/lib
PHP 종속성이 좋은 예입니다 libxml
.
$ ./configure --with-libxml-dir=...
--with-libdir
일부 스크립트는 라이브러리 검색 경로를 완전히 변경할 수 있는 스위치를 제공할 수도 있습니다 .
$ ./configure --with-libdir=...
당신은 또한 살펴보고 싶을 수도 있습니다config.site
파일 에 대한 스택 오버플로 질문입니다..