TL; DR: Вам необходимо включить заголовки, которые определяют типы в вашем приложении Win32. Статическая библиотека C ++ .lib
предоставляет символы только во время компоновки, а не во время компиляции.
C ++ библиотеки - это просто наборы .obj
файлов. Вы должны включить заголовки в ваше приложение, чтобы использовать библиотеку. Сам .lib
просто предоставляет объектный код, необходимый для компоновщика, не определения типов для компилятора. Эта система восходит к ранним дням C.
Как правило, вы устанавливаете открытый заголовок для статической библиотеки, которая определяет типы и точки входа, необходимые для ее использования. Тогда сама библиотека может иметь свои собственные внутренние заголовки, которые она использует при сборке и которые не предназначены для использования «клиентами».
Если существует более одного открытого заголовка, часто они помещаются в определенный каталог, например inc
или include
, а затем закрытые заголовки и все остальные исходные файлы помещаются в другое место, например src
/ source
каталог. Этот организационный трюк означает, что клиенты вашей библиотеки будут включать только общедоступные заголовки без возможности их включения, в том числе и ваши личные, потому что они должны иметь только вашу общедоступную папку inc
/ include
в своих путях поиска.
В общедоступных заголовках (s) вы обычно включаете стандартные заголовки, которые требуются для компиляции самого заголовка (т.е. <vector>
, <string>
и т. Д.).
В Modern C ++ лучше всего «оборачивать» ваши типы в пространство имен C ++, что не так важно для небольших проектов или когда вы просто используете статические библиотеки для локальной организации, но это становится важным, когда вы хотите поделиться своими статическая библиотека для других разработчиков. Есть некоторые хитрости для правильного использования пространств имен C ++, например, избегать использования операторов using namespace
в заголовках, использования анонимных пространств имен в модулях для скрытия закрытых типов и т. Д. См. в этом руководстве для ознакомления с основами.
См. Пошаговое руководство. Создание и использование статической библиотеки (C ++)
Некоторые примеры библиотек Visual C ++, в которых используются лучшие практики, см. В разделе Набор инструментов DirectX для DX11 / DX12 , DirectXTex и DirectXMesh .