Статические библиотеки (C++/CX)
Статическая библиотека, используемая в приложении универсальная платформа Windows (UWP), может содержать код C++ стандарта ISO, включая типы STL, а также вызовы API Win32, которые не исключены из платформы приложений среда выполнения Windows. Статическая библиотека использует компоненты среда выполнения Windows и может создавать компоненты среда выполнения Windows с определенными ограничениями.
Создание статических библиотек
Инструкции по созданию проекта зависят от установленной версии Visual Studio. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
Создание статической библиотеки UWP в Visual Studio
- В строке меню выберите «Файл>нового проекта«>, чтобы открыть диалоговое окно «Создать проект».
- В верхней части диалогового окна задайте для языка C ++, установите для Платформы значение «Платформа« и задайте тип проекта uWP.
- В отфильтрованном списке типов проектов выберите статическую библиотеку (универсальная windows — C++/CX), а затем нажмите кнопку «Далее«. На следующей странице укажите имя проекта и укажите расположение проекта при необходимости.
- Нажмите кнопку Создать, чтобы создать проект.
Создание статической библиотеки UWP в Visual Studio 2017 или Visual Studio 2015
- В строке меню выберите Файл >Создать >Проект. В разделе Visual C++>Windows universal выберите статическую библиотеку (универсальная windows).
- В области Обозреватель решенийоткройте контекстное меню для проекта и выберите пункт Свойства. В диалоговом окне «Свойства» на странице свойств>конфигурации C/C++ установите для параметра «Использовать расширение среда выполнения Windows» значение «Да» (/ZW).
При компиляции новой статической библиотеки при вызове API Win32, исключенном для приложений UWP, компилятор вызовет ошибку C3861 , «Идентификатор не найден». Чтобы найти альтернативный метод, поддерживаемый для среда выполнения Windows, см. статью «Альтернатива API Windows» в приложениях UWP.
При добавлении проекта статической библиотеки C++ в решение приложения UWP может потребоваться обновить параметры свойств проекта библиотеки, чтобы свойство поддержки UWP было задано как «Да«. Без этого параметра код создает и ссылки, но возникает ошибка при попытке проверить приложение для Microsoft Store. Статическая библиотека должна компилироваться с теми же параметрами компилятора, что и проект, в котором она используется.
При использовании статической библиотеки, которая создает открытые классы ref , открытые классы интерфейсов или открытые классы значений, компоновщик выдает следующее предупреждение:
предупреждение LNK4264: архивирование файла объектов, скомпилированного с помощью /ZW в статическую библиотеку; обратите внимание, что при создании типов среда выполнения Windows не рекомендуется связываться со статической библиотекой, содержащей метаданные среда выполнения Windows.
Вы можете безопасно игнорировать предупреждение, только если статическая библиотека не создает среда выполнения Windows компоненты, используемые за пределами самой библиотеки. Если библиотека не использует компонент, который он определяет, компоновщик может оптимизировать реализацию, даже если общедоступные метаданные содержат сведения о типе. Это означает, что открытые компоненты в статической библиотеке будут скомпилированы, но не активируются во время выполнения. По этой причине любой среда выполнения Windows компонент, предназначенный для использования другими компонентами или приложениями, должен быть реализован в библиотеке динамической компоновки (DLL).
Как правильно подключить библиотеку C++ в Visual Studio?
Скачал библиотеку из интернета. Внутри более 500 файлов .h и .cpp. Я сначала подумал нужно включить все файлы из библиотеки в проект. И в общем то всё работает, только дерево файлов в Visual Studio превратилось в мусор. И я так понял, что сделал что-то не так. Как правильно подключить библиотеку к проекту? Возможно есть более правильный способ, вместо включения всех исходников в проект?
Отслеживать
задан 24 ноя 2016 в 8:37
303 4 4 серебряных знака 12 12 бронзовых знаков
Соберите библиотеку отдельно (подробности в документации к ней) и подключайте к проекту как .lib или .dll .
24 ноя 2016 в 8:38
Почитал документацию — собрать библиотеку в .lib нельзя. Насчёт .dll — я так понял мне придётся всю библиотеку перелопатить и ставить перед всеми функциями __declspec(dllexport) ?
24 ноя 2016 в 8:40
@JaminPeru Интерфейс библиотеки, т.е. те функции, которые вы планируете вызывать кодом извне. Какие-то сугубо внутренние «кишки» библиотеки, вспомогательные функции экспортировать не нужно.
24 ноя 2016 в 8:54
Вам нужно собрать статическую версию библиотеки(я так понял, она по умолчанию соберёт как разе её). Затем добавить в проект студии пути до заголовочных файлов этой библиотеки и, наконец, подключить полученный lib файл в проект.
24 ноя 2016 в 9:46
@JaminPeru, lib, в windows, нужен всегда. Просто у него может быть разное содержимое. В случае статической сборки там весь нужный код, тогда как при сборке dll в lib лежит лишь информация для последующего импорта, которая генерируется на основании того, что код экспортирует.
Подключение статической библиотеки
В .h файле моей программы инициализирована структура.
Мне нужно использовать статическую библиотеку вместо него. Я в Visual Studio скомпилировал статическую библиотеку, где вызываю лишь хедер. Проблема в том, что мне не удается подключить ее к своей программе. Я пытался сделать это с помощью добавления этого: (#pragma comment ( lib, «MathFuncsLib.lib» )) в свойства Студии (Компоновщик -> Ввод -> Дополнительные зависимости), но мне это не помогло.
Я получаю ошибку:
Ошибка LNK1104 не удается открыть файл «#pragma comment ( lib, \MathFuncsLib.lib\ ).obj
Если туда же добавить лишь MathFuncsLib.lib, то компиляция крашится, но не из-за кривого вызова библиотеки, а из-за отсутствия определения структуры.
Не подскажите, как это пофиксить? Спасибо.
Отслеживать
20.2k 6 6 золотых знаков 37 37 серебряных знаков 81 81 бронзовый знак
Как поставить библиотеку в С++?
Я пришёл с питона несколько дней назад, и для своих задач я использовал только opencv. И вот тут я захотел попробовать C++ и как бы смешно не было, но я не нашёл даже гайдов как устанавливать библиотеки (Пролистав несколько страниц, и попробовав разные поисковые запросы и даже гайды на ютубе) Похоже это делается несколько сложнее чем в питоне. Windows 10 Visual Studio 2019
Отслеживать
задан 1 ноя 2020 в 17:42
189 3 3 серебряных знака 16 16 бронзовых знаков
«Похоже это делается несколько сложнее чем в питоне.» — это еще мягко сказано. Собственно концепция «поставить библиотеку» в самом С++, как таковая, отсутствует.
1 ноя 2020 в 17:44
Скажите операционку, и если вы на винде — еще и компилятор. Ну и на всякий случай IDE и систему сборки.
1 ноя 2020 в 17:47
@HolyBlackCat добавил : ) Я только скачал VS, и больше ничего не трогал, немного поучил синтаксис и всё.
