Как создать библиотеку импорта (.lib) И DLL в Visual C++?

Я хочу иметь один проект Visual Studio, который создает файл DLL и файл библиотеки импорта (.lib). (Библиотека импорта - это статически связанная библиотека, которая загружает этот файл DLL в другие проекты, которые его используют).

Итак, я перешел в Visual Studio C++ 2008 Express Edition, создал новый проект типа «Библиотека классов» и установил для «Тип конфигурации» значение «Dyanamic Library (.dll)».

Но когда я создаю решение, единственный соответствующий выходной файл, который я вижу, - это файл DLL; Я не вижу генерируемых LIB-файлов. Я просмотрел каталог проекта и все подкаталоги (Release и Debug).

Я считаю, что можно создать LIB и файл DLL одновременно, потому что в MSDN написано: «Компоновщик создает библиотеку импорта при сборке DLL». Кроме того, другой пользователь этого веб-сайта одновременно создает файлы LIB и DLL с помощью Visual C++ .

Так как я могу это сделать?

Ответов (4)

Решение

Выбрав «Библиотека классов», вы случайно сказали ему создать библиотеку .Net с помощью CLI (управляемого) расширения C++.

Вместо этого создайте проект Win32 и в настройках приложения на следующей странице выберите «DLL».

Вы также можете создать MFC DLL или ATL DLL из этих вариантов библиотеки, если хотите пойти по этому пути, но похоже, что вы этого не делаете.

Хорошо, поэтому я нашел ответ на http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/ говорит, что эта проблема был вызван тем, что не экспортируются какие-либо символы, и далее дает инструкции о том, как экспортировать символы для создания файла lib. Для этого добавьте следующий код в файл .h для вашей библиотеки DLL.

#ifdef BARNABY_EXPORTS
#define BARNABY_API __declspec(dllexport)
#else
#define BARNABY_API __declspec(dllimport)
#endif

Где BARNABY_EXPORTS и BARNABY_API - уникальные определения для вашего проекта. Затем каждой экспортируемой функции просто предшествует:

BARNABY_API int add(){
}

Эту проблему можно было предотвратить, щелкнув поле «Экспорт символов» в мастере DLL нового проекта или проголосовав за лоботомии для компьютерных программистов.

Есть ли у вашего проекта DLL фактический экспорт? Если нет экспорта, компоновщик не будет создавать файл библиотеки импорта .lib.

В версии VS, отличной от Express, имя библиотеки импорта указывается в настройках проекта здесь:

Configuration Properties/Linker/Advanced/Import Library

Я предполагаю, что то же самое и в Express (если он даже предоставляет возможность настроить имя).

вы также должны указать здесь def name в настройках проекта:

Конфигурация> Свойства / Ввод / Дополнительно / Модуль> Файл определения