.lib файл не создается (VS2008)

Я добавил проект dll в свое решение и прямо ссылался на него исполняемым проектом. Исполняемый файл жалуется, что он не может найти lib.

Любые идеи о том, как настроить проект на создание требуемого файла lib? И предположительно, почему проект не создавал бы одного?!?

Приветствия

Примечание Я искал проект, и файл нигде не создается.

Ответ 1

На вкладке Linker → Advanced в проекте DLL убедитесь, что значение для библиотеки импорта (файл .lib, который вы ищете) является правильным/разумным. Значение этого свойства определит имя библиотеки импорта и где компоновщик напишет ее.

Вам также может потребоваться создать файл определения импорта (.def) в вашем проекте или проверить файлы заголовков и убедиться, что ваши экспортированные функции отмечены спецификатором __declspec (dllexport) в файле заголовка. Обычно это переключается на #define, например:

#ifdef MYAPI_EXPORTS
#define MYAPI_API __declspec(dllexport)
#else
#define MYAPI_API __declspec(dllimport)
#endif

void MYAPI_API foo(int bar);

В основном вы хотите, чтобы компилятор увидел dllexport при его создании, но dllimport, когда ваш код клиента содержит #include файл заголовка. Если Visual Studio сгенерировала основную структуру проекта, возможно, уже создана подходящая #define для использования.

Вам не нужно создавать файл .def и добавлять dllexport, только один или другой. Я предпочитаю последнее. Кроме того, если вы решите использовать файл .def, вам нужно указать его в свойствах Linker вашего проекта библиотеки.

Ответ 2

Я видел это раньше. И на самом деле сейчас просто ударил снова. Файл .lib не создается, если ничего не экспортировано. Экспортирование функций происходит двумя способами.

1) отметьте функцию с __declspec (dllexport).

ИЛИ

2) Используйте файл .def, в котором перечислены все функции, которые необходимо экспортировать.

Решение:

1) Обычно требуется установить флаг времени компиляции для активации блока препроцессора для установки некоторого #define в __declspec(). Кто-то еще указал, что в их должности.

2) Требуется установка строки Properties- > Linker- > Input- > Module Definition File.

Ответ 3

Вы включили файл lib в Project Properties- > Linker- > Input sheet в Exe Project.

Кроме того, убедитесь, что вы включили дополнительные ссылки на вкладке Linker.

Ответ 4

Проверьте проект, который создает DLL. Если он не создает .lib, вы, вероятно, не сказали об этом. Вы можете изменить вывод проекта из DLL в статическую библиотеку в свойствах → Общие → Тип конфигурации (выберите Static Library.lib)