2010-08-23 2 views
0

공유 라이브러리 A, B 및 C를 사용하는 응용 프로그램 X가 있습니다. 공유 라이브러리 C는 공유 라이브러리 A의 일부 기호도 사용합니다. 응용 프로그램 X는 컴파일하는 동안 A와 B에 연결되며 런타임에 C를로드하기 위해 dlopen 않습니다 .공유 라이브러리를 다른 공유 라이브러리와 링크하는 것이 좋습니까?

내 질문은 : 그것은 링크 시간 동안에 C를 연결하거나 런타임에 대한 기호 해상도를두고하는 것이 좋습니다

인가?

+0

나는 당신을 알 수 없었다 ^^ –

답변

2

옵션 1. 그러나 그렇게는 작동하지 않습니다.

  1. 당신은으로
    이 phsically 아무것도하지 않는 것이 LIB 동적 인 A로 C를 연결합니다.
    런타임에 A가 모든 종속성을 충족하는지 확인합니다. 당신이한다면 dlopen 런타임시

  2. () 그것은 C를 열 것이며, 이미에 링크하지 않은 경우도
    을 열 것입니다하지만 아직 열려 있기 때문에 그냥 심볼을 해결할 수
    공유 LIB C C가 열려있는 A와 함께.

+2

응용 프로그램과 라이브러리 C가 다른 주요 버전의 라이브러리 A에 링크되어있는 경우 문제가있을 수 있습니다. 그런 다음 두 주요 버전이로드되고 심볼이 혼합되며, 기호 버전이없는 한. –

+0

예. 하지만 그것은 별개의 문제입니다. 우리가 손에 들고있는 문제에 초점을 맞추도록 노력합시다 (이 경우에는 문제가되지 않습니다). 우리가 버전 관리에 들어가기를 원한다면 OP는 그것에 대해 특정 질문을 게시해야합니다. –

0

옵션 2와 함께 갈 것입니다. 런타임에 대한 해상도를 유지하십시오. 후기 바인딩이 가장 좋습니다. 또한 옵션 1이 가능하다는 것을 결코 알지 못했습니다.

관련 문제