Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Configuration Properties/Linker/Advanced/Import Library

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

Ответ 3

ОК, поэтому я нашел ответ от 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 Wizard, либо голосованием "да" для лоботомий для компьютерных программистов.

Ответ 4

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

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