2009-08-06 2 views
1

정적으로 라이브러리에 연결하는 프로그램 (libA.2.0.a)과 다른 라이브러리 (libB.so)에 동적으로 링크되는 프로그램이 있습니다. libB.so도 이전 버전의 libA (libA.1.0.so)에 동적으로 연결됩니다.정적으로 동적으로 동일한 라이브러리를 연결합니다.

이 구성이 가능합니까? 그렇다면 시스템에서 내 프로그램에 libA.2.0.a의 기호를 사용하는 방법을 알고 libB.solibA.1.0.so의 기호를 사용하는 방법은 무엇입니까?

답변

5

예.이 구성이 가능합니다.

시스템에서 기호 사용법을 알고있는 방법에 대한 질문에 대답 할 때 모든 링크가 빌드시 발생한다는 점을 기억하십시오. 빌드 된 후에는 "심볼"에 대한 질문이 아니며 다양한 주소에서 다양한 기능을 호출합니다.

libB.so를 빌드하면 libA.1.0.so에 대한 링크가 설정됩니다. 그것은 그것을 사용하는 다른 응용 프로그램이 무엇을 할 것인지 알지 못하거나 신경 쓰지 않습니다. 단지 자신의 함수 호출을 매핑하는 방법을 알고 있습니다.

응용 프로그램 자체를 빌드 할 때 응용 프로그램은 libB.so에 링크됩니다. libB.so가 호출하는 것은 애플리케이션에서 전혀 알려지지 않은 것입니다. 또한 응용 프로그램은 libB.so가 신경 쓰지 않는 라이브러리에 정적으로 링크됩니다.

하나의 문제 : libA가 정적 변수를 사용하는 경우 libB.so에서 액세스 할 수있는 정적 집합과 응용 프로그램에서 액세스 할 수있는 독립적 인 정적 집합이 있습니다.

+0

설명해 주셔서 감사합니다. 매우 유용한 정보. –

관련 문제