주어진 실행 파일에 대한 링크 된 라이브러리 변경 (CentOs 6)


29

다음과 같이 연결된 실행 파일이 있습니다.

  $ ldd a.out
        libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x00007f4881f56000)
        libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f4881cfb000)
        libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f4881965000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f488175d000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4881540000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4881239000)
.
.

libcrypto 및 libssl 라이브러리는 openssl 1.0.0-fips libs입니다. 대신 1.0.1 라이브러리를 실험하고 싶어서 홈 디렉토리에 빌드했습니다. a.out많은 어려움없이 새로운 openssl 라이브러리에 다시 연결할 수있는 방법이 있습니까? 나는 피하고 싶다

  • 다시 연결해야 함 a.out(빌드 도구가 매우 복잡하기 때문에)
  • 다른 개발자가이 컴퓨터에서 작업하기 때문에 전역 설정 변경

내가 바라는 것을 할 수 있습니까?

답변:


22

이 특정 실행을 위해 다른 라이브러리를 임시로 대체 할 수 있습니다. Linux에서 환경 변수 LD_LIBRARY_PATH는 표준 디렉토리 세트보다 먼저 라이브러리를 검색해야하는 콜론으로 구분 된 디렉토리 세트입니다. 이것은 새로운 라이브러리를 디버깅하거나 특수 목적을 위해 비표준 라이브러리를 사용할 때 유용합니다. 환경 변수 LD_PRELOAD는 /etc/ld.so.preload와 마찬가지로 표준 세트를 재정의하는 함수가있는 공유 라이브러리를 나열합니다. - 공유 라이브러리

로더를 직접 호출 할 수도 있습니다.

/lib/ld-linux.so.2 --library-path path executable


1
LD_LIBRARY_PATH는 기본 검색 경로를 무시하지 않습니다. 나는 그것을 설정했지만 ldd는 여전히 재정의 된 경로가 아니라 시스템 기본 경로를 보여줍니다. LD_PRELOAD를 설정하여 내 라이브러리를 강제로로드 할 수는 있지만.
Calmarius

18

LD_LIBRARY_PATH환경 변수 를 설정하는 랩퍼 스크립트를 작성 하십시오. 이것은 PATH공유 라이브러리 의 펜던트입니다 . 시스템 검색 경로는에 나열된 디렉토리 다음에 항상 검색됩니다 $LD_LIBRARY_PATH. 참고 항목 동적 링커 설명서를 참조하십시오.

#!/bin/sh
export LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib
exec /path/to/a.out "$@"

또는 명령 행에서 일회성으로 직접 :

LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib ./a.out

또는 바이너리를 수정하려면 chrpath를 시도 하십시오.이 경우 실행 파일에 구운 라이브러리 검색 경로를 편집 할 수 있습니다.


2
일에 대한 chrpath. 정확히 내가 필요한 것.
Raghav RV

귀여운 이야기, Microsoft는 2 분 인터넷 검색에 너무 바보이며 SQL Server를 openss-1.0.0에 명시 적으로 연결하거나 openssl.so blogs.msdn.microsoft.com/sql_server_team
Evan Carroll
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.