Чи можливі залежні від статичної бібліотеки залежності?


12

Я працюю в QT.

  1. Чи може статична бібліотека залежати від іншої статичної бібліотеки? (Статична Lib створюється шляхом з'єднання іншої статичної ліб)
  2. Якщо так, то чи можливо, що після посилання на lib2, згенерована lib (lib1) не міститиме всіх кодів lib2?

У своєму проекті Qt я використовую статичну бібліотеку, яка залежить від декількох бібліотек. Мені довелося додати всі бібліотеки (з усіма їх заголовками в мій проект), хоча мені потрібна лише одна lib (і одна .h цього класу) у моєму коді.

Поясніть, будь ласка, сценарій.

Відповіді:


6

Коли ви декларуєте щось, ви просто обіцяєте, що під час посилання це буде доступне та унікальне визначення. Статичні ліфти - це не що інше, як контейнери для визначень у форматі, який знаходиться поза стандартом. Отже, це має такі наслідки:

1) Я не дуже розумію, про що ви тут просите, але одна статична бібліотека може дуже сильно залежати від іншої статичної бібліотеки. Або ви обіцяєте, що визначення цієї бібліотеки будуть доступними під час останнього етапу зв’язування вашого виконуваного файлу (надаючи його як залежність посилання). Або ви "зливаєте" його під час з'єднання статичної вкладки.

2) Відповідь на це потім стає, що єдине, що вам потрібно зробити, це просто не зв'язуватися в lib2 під час зв’язування lib1.

В цілому найкращим підходом у моєму досвіді є об'єднання лише приватних контурів, тому що в іншому випадку клієнти зіткнуться з порушеннями багатозначних символів, коли інші частини проекту поділяться з вами залежностями.


Це означає, що статична ліб, яка залежить від іншої статичної в'язки, але містить інформацію про зв'язок цієї лібу, МОЖЛИВА. Це означає, що коли мені потрібно включити першу лібу в свій проект, я також зобов'язаний включити другу. Bcoz, перший lib не містить цілих кодів другого lib.
sk patra

6

Мої швидкі два шматочки з цього приводу: 10 (вибачте жахливий жарт).

Щоб трохи розширитись, ось що:

1- Статична бібліотека може залежати від іншої статичної бібліотеки, нічого або навіть динамічної бібліотеки: у перших двох випадках весь код нової статичної бібліотеки буде включений до нової SLL (статичної посилання бібліотеки), однак, 3-й варіант залежно від навколишнього середовища може призвести до того, що УЛР має один із наступних результатів,

  • він міститиме статичні версії потрібного йому коду, зібраного з DLL (бібліотека динамічних посилань)
  • або, що ще жахливіше, ви мали б статичну бібліотеку, яка, якщо вона включена в проект, спричинить вимогу доставки з DLL, порушуючи всю точку статичного зв’язку.

Отже, коротко, ви можете зв'язати статичну бібліотеку зі статичною бібліотекою

2- якщо lib1 і lib2 є статичними, а lib1 пов'язаний з lib2, то вся функціональність lib2 буде доступна всередині lib1 без необхідності включати lib2, оскільки lib2 буде статично пов'язаний всередині lib1 (думайте, російські ляльки, з lib2 будучи меншим).

У описуваному сценарії у кожному з файлів, до яких потрібно включити, має бути дискретна функціональність, яка статично не пов'язана, отже, необхідність у декількох файлах, інакше у вас буде один файл, який слід включити, і ви будете добре.

Візьміть наступне: Один .h файл із посиланням на 6 статично пов'язаних бібліотек: вам потрібно буде включити 7 файлів у свій проект, щоб отримати повну функціональність

Приклад включення 1

Один SLL, створений із згаданого .h-файлу, вимагатиме включення лише нової SLL для посилання при компіляції:

Приклад включення 2

Сподіваюся, це допомагає, і що я зрозумів, про що ви питаєте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.