2013-05-20 2 views
1

저는 C++로 큰 정적 라이브러리를 작성하고 있습니다. 그 라이브러리에서는 정적 라이브러리와 동적 라이브러리의 심볼을 사용합니다. 내가 "만들"때, 정적이기 때문에 lib에 링크 할 필요가 없습니다. 여기 내 문제가 : 내 정적 라이브러리 매우 일반입니다. 동일한 인터페이스에 대해 여러 구현을 제공합니다 (드라이버과 같은 구현을 볼 수 있으며 libA는 자체 구현을 제공하고 libB 등을 제공합니다). 그 중 일부는 플랫폼에 따라 다르기 때문에 함께 사용하도록 의도 된 입니다..정적 라이브러리를 통한 조건부 연결

내 lib에 링크 할 때 문제가 발생합니다. 고객의 코드가 lib의 기호에 의존하지 않더라도 클라이언트는 내 lib가 사용하는 모든 libs에 링크해야합니다. 예를 들어, 클라이언트 코드가 libA에만 의존하는 경우 내 정적 라이브러리에 libB의 일부 기호가 있기 때문에 그는 여전히 libB에 링크해야합니다.

이러한 동작을 방지하고 클라이언트의 코드에서 기호를 추론하여 실제로 사용되는 라이브러리에 대해서만 링크하는 방법을 알고 있습니까?

감사합니다.

답변

0

다른 라이브러리와 동적으로 링크 할 가능성이 있습니다. 정적 버전의 논문과 연결해보십시오.

+0

기호는 정적 ** 또는 ** 동적 라이브러리에서 가져올 수 있습니다. 정적으로 만 연결할 수는 없습니다. – phaazon

0

라이브러리가 올바르게 이해하면 클라이언트 코드에 따라 defined이 될 것으로 예상되는 기호를 사용하려고합니다. 클라이언트 코드에 certain symbols이없는 경우 링커에서 not link 라이브러리의 특정 부분을 원합니다. 맞습니까?

위 항목이 요구 사항을 충족하는 경우 http://en.wikipedia.org/wiki/Weak_symbol을 고려하십시오. 어떤 도구 체인을 사용하고 있는지는 잘 모르겠지만 약한 기호가 조건부 연결을 달성하기위한 유쾌한 방법이라면 지원됩니다.

+0

네, 그게 내가 원하는거야. 내 정적 라이브러리에 많은 정적 기호가 있지만 최종 프로그램에서 내 보내지 않기를 바랍니다. (따라서 정의되지 않았는지 상관하지 않습니다) – phaazon

+0

clang ++이 이러한 기능을 지원하는지 알고 있습니까? 나는 g ++과 clang을 모두 사용합니다. ++ – phaazon

+0

@skp는'clang ++'에 대해서는 확실하지 않지만'GNU gcc (와 g ++)'는 확실히이 기능을 지원합니다. 인터넷 검색에서 나는 '#pragma weak'이 'clang ++'의 해당 기능이라고 믿게되었습니다. 나는 g ++과 clang ++을 추가하는 것이 좋습니다. 그 지역의 일부 전문가들을 끌어 들여 논평 할 것이다. – Aravind

관련 문제