![실행 파일을 동적 라이브러리와 강제로 연결하는 방법](https://linux55.com/image/121988/%EC%8B%A4%ED%96%89%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%8F%99%EC%A0%81%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EC%99%80%20%EA%B0%95%EC%A0%9C%EB%A1%9C%20%EC%97%B0%EA%B2%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
이 컴파일된 실행 파일이 있습니다.
./run.x
다른 컴퓨터로 옮겼지만 동적 종속성이 충족되지 않습니다.
ldd ./run.x
libx.1.so => not found
그러나 두 번째 시스템에는 동일한 라이브러리의 최신 버전이 있습니다(그러나 Linux 커널과 기타 리소스는 동일합니다). 내 질문은: 다른 공유 개체를 강제로 연결하는 것이 가능합니까?
ldd ./run.x
libx.1.so => libx.2.so
심볼릭 링크를 만들 필요도 없고 libx.1.so => libx2.so
전체 애플리케이션을 다시 컴파일할 필요도 없습니다(이렇게 하지 않을 충분한 이유가 있습니다).
답변1
너할 수 있다하지만 바이너리에서 링크 이름을 패치하는 것은 좋은 생각이 아닙니다. 라이브러리의 버전(기술적으로는 해당 이름)이 변경되면 이는 이전 버전과 호환되지 않는 방식으로 변경되었음을 의미하므로 실행 파일이 새 라이브러리에서 작동한다는 보장이 없습니다.
이 문제를 해결하려면 이전 라이브러리를 복사하거나 실행 파일을 다시 컴파일해야 합니다.