2013-08-29 2 views
2

절대적으로 필요하지 않으면 정적 링크에 대해 --start-group 및 --end-group을 사용하지 않도록 연습했습니다. 우리는 문제의 정적 라이브러리가 순환 종속성을 가지 든 그렇지 않든 관계없이 무조건 사용했습니다. 무조건적인 --start-group과 --end-group을 꺼낸 후에 링커가 덜 스트레스를 받는다는 것을 이해하지만 정말로 필요한 곳에 만 배치하십시오.동적 라이브러리에 대한 --start-group 및 --end-group 링커 플래그의 중요성

동적 연결 라이브러리에 대한 이러한 옵션의 중요성을 알고 싶습니다.

동적 라이브러리가있는 경우 ld.so 런타임 로더가 순환 종속성을 어떻게 해결합니까?

다른 질문이 생기면 동적 라이브러리를 사용하는 --start-group 및 --end-group 사용법에 대해 정말로 걱정해야합니까?

솔직히 말해서, 이것에 대해서는 아직 충분히 읽지는 못했지만, 여기서 물어 보는 것은 괜찮다고 생각했습니다.

답변

3

정적 라이브러리와 달리 동적 라이브러리는 유용한 기호를 제공하지 않아도로드됩니다. 이로 인해 주문의 관련성이 떨어집니다.

정적 라이브러리의 경우 잘못된 순서는 나중에 필요한 경우에도 필요한 라이브러리 또는 .a 파일 내의 객체를 가져올 수 있습니다. 이것은 --start-group--end-group이 해결하는 것입니다.

동적 라이브러리에서는 두 명령이 모두 작동합니다. liba.so 수출 alibb.so이 필요하다고 가정합니다. liba.so이 먼저로드되면 libb.so이로드되면 사용하게됩니다. libb.so이 먼저로드 된 경우 liba.so이로드 될 때까지 a이 잠시 동안 해결되지 않습니다. 어느 쪽이든, 그것은 작동합니다.

+0

나는 마지막 단락이 잘못되었거나 혼란 스럽다고 생각한다. 나는 혼란을 없애기 위해 더 많은 것을 읽을 것이다. :) – venkrao

+0

@venkrao, 나는 동적 대신에 정적을 썼다. 아마도 그게 문제 일까? – ugoren

+0

예. 마지막 단락은 지금 의도 된 의미를 설명합니다. 고마워. – venkrao