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

Сборка выполнена успешно, но файл .lib не создается

Я унаследовал значительный объем кода, включая проект визуальной студии, который, как я могу сказать, должен построить файл .lib. Visual studio говорит: "... Создание кода... Создание библиотеки... Создание файла информации...", и в конце он говорит, что сборка выполнена успешно. В папке release/debug у него есть куча файлов .obj, но у него нет .lib файла. Что я могу потерять?

Спасибо!

4b9b3361

Ответ 1

Откройте "Свойства проекта" (щелкните правой кнопкой мыши проект в обозревателе решений, выберите "Свойства" ). В разделе "Библиотекарь" установите флажок "Выходной файл" - там, где должен быть выход.

Если это выглядит правильно, попробуйте dir /s *.lib в подходящем подкаталоге для вашего проекта, чтобы узнать, можете ли вы найти библиотеку вывода по дате и времени. Если вы все еще не можете найти его, попробуйте выполнить чистую перестройку (щелкните правой кнопкой мыши проект, выберите "Восстановить" ).

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

Ответ 2

.lib не будет генерироваться, если вы пропустите добавление префикса __declspec (dllexport) для методов.

Ответ 3

Моя статическая библиотека содержит только два класса шаблонов, поэтому у меня не было .cpp файла. Это заставило Visual Studio 2015 не выводить файл .lib. Чтобы решить эту проблему, я сделал файл huh.cpp, который включает в себя все заголовки.

Ответ 4

Я просто столкнулся с этой проблемой.

Это связано с использованием недопустимого макроса в определении выходного каталога. В моем случае это было введите описание изображения здесь

когда это должно было быть

введите описание изображения здесь

Мне пришлось пропустить полный путь во втором снимке экрана. У меня был неправильный макрос. Я использовал MsBuildProjectDir, когда я должен был использовать MsBuildProjectDirectory. Текстовое поле только для чтения отображает полный путь (например: C:\Development\blah\blah\blah\), когда выходной каталог действителен. Если выходной каталог недействителен, вы получите что-то вроде первого снимка экрана.

Ответ 5

У меня была такая же проблема, хотя я уже использовал __declspec(dllexport).

Ваш файл ProjectName.cpp должен #include "ProjectName.h". Если вы не включите заголовочный файл, функции не будут экспортированы. DLL работает нормально, без ошибок и предупреждений (по крайней мере, в VS2017 15.8), но вы не получите файл LIB.

Включите заголовок и бум - LIB файл генерируется. Ошибка новичка, я уверен, но каждый должен начать учиться где-нибудь.

Ответ 6

Если Методы, которые вы хотите экспортировать, находятся в классе, вы должны __declspec(dllexport) для класса. В противном случае .lib не будет создан.

Ответ 7

В проекте DLL поместите __declspec (dllexport) методов, определенных в файлах .h и .cpp.

В конце концов, снова скомпилируйте вашу dll, чтобы файл .lib был сгенерирован и готов к связыванию.

put Class Foo
{
public:
    __declspec(dllexport) int GetFoo() const;