개발 버전이 시스템 패키지와 충돌하는 것을 방지합니다.

개발 버전이 시스템 패키지와 충돌하는 것을 방지합니다.

내 말은, 내 시스템 패키지를 통해 설치한 오픈 소스 프로젝트에 대해 몇 가지 작업을 할 계획이라는 뜻입니다. 시스템에 설치된 패키지를 유지하면서 개발 중인 버전을 컴파일하고 실행하려는 이러한 상황을 관리하기 위해 제안된 워크플로가 있는지 궁금합니다.

내 질문은 이전에 다른 프로젝트에서 이에 대해 생각해 본 적이 있기 때문에 매우 일반적인 질문이지만 이 특별한 예를 통해 질문을 하게 되었습니다.

제가 언급한 프로젝트는여울. 물론 프로젝트에는 다른 종속성이 있지만 특히 동일한 작성자의 종속성이 있습니다.libtorrent. 요점은 이 두 가지가 모두 내 시스템 패키지보다 최신이므로 두 가지를 모두 가져와 해당 libtorrent 버전에 대해 rtorrent를 빌드해야 한다는 것입니다.

지금까지 나는 libtorrent를 컴파일했지만 make install내 시스템 패키지와 충돌할 것이라고 생각하기 때문에 아직 실제로 실행하지 않았습니다. 결국 라이브러리 파일을 에 덤프 src/.libs하지만 헤더 파일에도 액세스해야 한다고 생각합니다. 그렇죠?

이 git cloned rtorrent 구축을 어떻게 진행해야 합니까? 이전에 이런 일을 해본 적이 없으므로 무지함을 용서해 주십시오. 하지만 모든 것이 대본을 중심으로 진행됩니까 ./configure? 단순히 use를 사용하여 LDFLAGS라이브러리 경로를 추가 -L하고 CPPFLAGS포함 경로(헤더용)를 추가 해야 합니까 -I? 아니면 libtorrent와 rtorrent의 공통분모를 사용하여 re- ./configurelibtorrent를 사용한 --prefix다음 make installlibtorrent를 사용해야 합니까?

감사해요!

편집하다: ./configure --help이러한 "영향력 있는 환경 변수"를 표시합니다.

libtorrent_CFLAGS
          C compiler flags for libtorrent, overriding pkg-config
libtorrent_LIBS
          linker flags for libtorrent, overriding pkg-config

제가 궁금한 점은 LDFLAGSand 를 설정하더라도 CPPFLAGS결국에는 libtorrent가 사용하는 정보를 계속 얻게 되므로 pkg-config이를 사용해야 한다는 인상을 준다는 것입니다. 이를 사용하면 성공적인 ./configure실행이 가능해졌고 --prefix계속 사용할 수 있다고 생각되는 매개변수가 생겼습니다.

답변1

이 문제를 처리하는 두 가지 주요 방법이 있습니다.런타임 시, rpath를 사용하여 연결하거나 LD_LIBRARY_PATH 또는 LD_PRELOAD를 통해 개발 공유 객체를 로드합니다.

컴파일할 때 필요한 -I/-L 명령줄 옵션을 삽입해야 합니다(이미 방법을 찾았습니다).

글쎄, 나에게 효과가 있었던 것은 rpath-linking을 사용하고 pkgconfig를 고수하여 생성된 구성 파일을 패치하여 올바른 경로를 내보내는 것이었습니다. 바라보다이 스크립트더 알아보기.

관련 정보