Как создать библиотеку импорта (.lib) И DLL в Visual C ++? - PullRequest
65 голосов
/ 25 февраля 2009

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

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

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

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

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

Ответы [ 4 ]

74 голосов
/ 25 февраля 2009

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

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

Configuration Properties/Linker/Advanced/Import Library

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

28 голосов
/ 24 октября 2011

ОК, поэтому я нашел ответ от 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 нового проекта, либо проголосовав «да» за лоботомию для программистов.

21 голосов
/ 25 февраля 2009

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

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

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

8 голосов
/ 24 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...