/usr/bin에 있는 프로그램이 항상 /usr/lib에 있는 라이브러리를 사용하도록 하는 방법

/usr/bin에 있는 프로그램이 항상 /usr/lib에 있는 라이브러리를 사용하도록 하는 방법

Fedora 26의 경로 문제로 어려움을 겪고 있습니다. 나는 업데이트된 프로그램과 라이브러리를 구축하고 이를 프로그램이 사용 하는 /usr/local. 현재 알려지지 않은 이유로 Fedora 26은 Linux 라이브러리를 사용하고 있습니다 ./usr/local/bin/usr/local/libgawk/usr/bin/gawk/usr/local/lib

라이브러리가 /usr/local/lib예상한 것과 호환되지 않아 gawk스크립트가 손상됩니다. 또는 더 정확하게는 내 스크립트가 Autotools를 호출한 다음 경로가 엉망이 아니더라도 Autotools가 중단됩니다. 배경 문제에 대한 자세한 내용을 보려면 다음을 방문하세요.libreadline.so.7: 정의되지 않은 기호: UP스택 오버플로에.

/usr/bin나는 그 안에 있는 모든 프로그램이 반드시 연결되어야 한다는 정책을 시행하고 싶습니다 /usr/lib. 나는 믹스인이나 삽입물에 신경 쓰지 않습니다. 이 작업을 수행해야 하는 경우 소스에서 패키지를 빌드하고 /usr/local.

예를 들어 다른 운영 체제에서는 오래 전에 OS X 및 Windows의 매니페스트를 통해 install_names이 문제를 해결했습니다 . Linux에서는 동일한 문제가 악화되도록 허용합니다( --enable-new-dtags내 생각에는 이것이 문제를 해결하지 못하는 최신 반창고라고 생각합니다).

/usr/bin프로그램을 의 라이브러리에 강제로 연결하려면 어떻게 해야 합니까 /usr/lib?

답변1

동적 부분을 지정하여 실행 파일의 검색 경로를 재정의할 수 있습니다 DT_RUNPATH. 바라보다ld.so 매뉴얼 페이지. 표준 위치를 사용하는 것이 표준이어야 하며, /usr/lib라이브러리를 사용하려는 프로그램(너무 많지 않기를 바랍니다)은 링커에 다음 gcc 옵션을 추가하여 연결해야 합니다 ./usr/local/lib

gcc ... -Wl,-rpath,/usr/local/lib -Wl,--enable-new-tags ...

답변2

export LD_LIBRARY_PATH=/usr/lib

또는 다음 명령을 직접 실행하세요.

LD_LIBRARY_PATH=/usr/lib gawk

기본 검색 순서는 다음에서 구성할 수 있습니다./etc/ld.so.conf

답변3

시스템에 이미 있는 라이브러리를 수동으로 컴파일하는 경우 /usr/lib위치에 상관없이 최신 설치가 우선 적용됩니다. 라이브러리 경로는 /etc/ld.so.conf에 지정되어 있으며 원하는 라이브러리에 대한 경로가 포함된 새 파일을 생성한 다음 나중에 실행할 수 있습니다./usr/lib64/usr/local/lib/usr/local/lib64/etc/ld.so.conf.dldconfig

또는 스크립트에서 LD_LIBRARY_PATH환경 변수를 사용하여 자체 라이브러리 경로를 설정할 수 있습니다. 이렇게 하면 스크립트가 지정된 라이브러리 경로를 사용하게 됩니다. 여러 경로를 세미콜론으로 구분하여 제공할 수 있습니다.

관련 정보