중첩 정적 라이브러리 종속성이 가능합니까?


12

나는 QT에서 일하고 있습니다.

  1. 정적 라이브러리가 다른 정적 라이브러리에 의존 할 수 있습니까? (Static Lib은 다른 정적 라이브러리를 연결하여 작성 됨)
  2. 그렇다면 lib2에 연결 한 후 생성 된 lib (lib1)에 lib2의 모든 코드가 포함되어 있지 않을 수 있습니까?

내 Qt 프로젝트에서 여러 라이브러리에 의존하는 정적 라이브러리를 사용하고 있습니다. 내 코드에는 하나의 라이브러리 (및 해당 클래스의 .h) 만 필요하지만 모든 라이브러리 (프로젝트에 모든 헤더 포함)를 추가해야했습니다.

시나리오를 설명하십시오.

답변:


6

무언가를 선언하면 연결하는 동안 사용할 수 있고 고유하게 식별된다고 약속합니다. 정적 라이브러리는 표준을 벗어난 형식의 정의를위한 컨테이너 일뿐입니다. 따라서 다음과 같은 의미가 있습니다.

1) 내가하지 않는 아주 여기 요구하는지 무엇을 얻을 수 있지만, 하나의 정적 라이브러리는 매우 다른 정적 라이브러리에 따라 달라질 수 있습니다. 실행 파일의 최종 연결 단계에서 해당 라이브러리의 정의를 사용할 수 있음을 약속합니다 (링크 종속성으로 제공하여). 또는 정적 lib를 연결하는 동안 "병합"합니다.

2) 이것에 대한 대답은 당신이해야 할 유일한 일은 lib1을 링크하는 동안 lib2에서 단순히 링크하지 않는 것입니다.

내 경험에서 가장 좋은 방법은 비공개 라이브러리 만 병합하는 것입니다. 그렇지 않으면 프로젝트의 다른 부분이 사용자와 종속성을 공유 할 때 클라이언트가 여러 정의 된 기호 위반을 일으킬 수 있기 때문입니다.


그것은 다른 정적 lib에 의존하는 정적 lib이지만 해당 lib의 링크 정보가 포함되어 있음을 의미합니다. 즉, 프로젝트에 첫 번째 lib를 포함해야 할 때 두 번째 lib도 포함해야합니다. Bcoz, 첫 번째 lib에는 두 번째 lib의 전체 코드가 포함되어 있지 않습니다.
sk patra

6

이것에 대한 나의 빠른 두 비트 : 10 (죄송한 끔찍한 농담).

약간 확장하려면 다음을 수행하십시오.

1- 정적 라이브러리는 다른 정적 라이브러리, 전혀 또는 심지어 동적 라이브러리에 의존 할 수 있습니다. 처음 두 인스턴스에서 새 정적 라이브러리의 모든 코드는 새 SLL (Static Link Library)에 통합되지만 세 번째 옵션은 환경에 따라 SLL이 다음 결과 중 하나를 가질 수 있습니다.

  • DLL (Dynamic Link Library)에서 수집 한 코드의 정적 버전을 포함합니다.
  • 또는 훨씬 더 끔찍하게도 프로젝트에 포함될 때 DLL과 함께 제공 해야하는 정적 라이브러리가있어 정적 링크의 요점을 모두 깨뜨릴 수 있습니다.

간단히 말해 정적 라이브러리를 정적 라이브러리에 연결할 수 있습니다.

2 lib1과 lib2가 정적이고 lib1이 lib2와 링크 된 경우 lib2가 lib1 내에서 정적으로 링크되므로 lib2를 포함 할 필요 없이 lib2 내에서 lib2의 모든 기능을 사용할 수 있습니다 (lib2를 사용하는 러시아 인형 생각) 더 작음).

이 시나리오에서는 포함해야 할 각 파일에 사용 가능한 개별 기능이 있어야하며, 정적으로 링크되어 있지 않으므로 여러 파일이 필요합니다. 그렇지 않으면 포함 할 단일 파일이 있고 괜찮을 것입니다.

다음을 수행하십시오. 6 개의 정적으로 링크 된 라이브러리에 대한 참조가있는 하나의 .h 파일 : 전체 기능을 사용하려면 프로젝트에 7 개의 파일을 포함해야합니다.

포함 예 1

.h 파일에서 생성 된 하나의 SLL은 컴파일시 링크를 위해 새 SLL 만 포함하면됩니다.

포함 예 2

이것이 도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.