2008-10-03 5 views
16

가정 해보자. /etc/ld.so.conf 에 포함 된 경로에 foo.so.1.1.1 라이브러리를 추가했습니다. 시스템에서 ldconfig를 실행하면 foo.so.1.1과 foo 링크가 생깁니다. so.1 ~ foo.so.1.1.1리눅스 - ldconfig 사용

foo.so.1.1.1에 대한 foo.so 링크를 얻으려면 어떻게 동작을 변경할 수 있습니까?

+0

http://stackoverflow.com/questions/462100/bash-script-to-create-symbolic-links-to-shared-libraries/8144642#8144642 – user1016736

답변

24

ldconfig는 찾은 모든 공유 객체를 조사하여 soname을 찾습니다. 그런 다음 해당 이름을 링크 이름으로 사용하여 링크를 만듭니다. 라이브러리의 이름과 주요 버전이 soname을위한 (그러나 범용 적으로는 거의 이루어지지 않았기 때문에) 라이브러리 foo.so.1.1은 foo.so.1의 soname을 가지며 ldconfig는이를 호출하는 링크를 만들 것입니다.

런타임 시스템의 어떤 부분도 foo.so라는 이름을 찾지 못합니다. 이는 프로그램을 라이브러리에 연결할 때 사용됩니다. 라이브러리에 대한 다른 모든 개발 파일 (헤더 등)을 가지고 있지 않으면 링크가 필요하지 않으므로 ldconfig에 자동으로 생성 할 필요가 없습니다. 그리고 사용하는 링크의 이름은 또 다른 규칙 일 뿐이며,이 경우에는 파일 내에 전혀 저장되지 않기 때문에 ldconfig가 어떤 이름을 만들지 알 길이 없습니다.

일반적으로 이것은 Makefile의 설치 대상에서 수동으로 생성됩니다. 라이브러리가 리눅스 배포본을 위해 패키지화 될 때 링크는 일반적으로 헤더 파일과 함께 -dev 패키지에 있습니다.

3

은 그냥 자신을 심볼릭 링크합니다 응용 프로그램은 이러한 방식으로 라이브러리를 사용하는, 명시 적 버전없는 공유 객체에 링크 할 필요가

ln -s /usr/lib/foo.so.1.1.1 /usr/lib/foo.so 

참고. IE : 이것은 동적 로더의 버전 매칭 시스템을 완전히 우회하는 메커니즘입니다.