Сборка выполнена успешно, но файл .lib не создается - PullRequest
46 голосов
/ 16 октября 2010

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

Спасибо!

Ответы [ 7 ]

61 голосов
/ 17 октября 2010

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

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

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

14 голосов
/ 05 июля 2017

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

12 голосов
/ 20 сентября 2015

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

2 голосов
/ 28 ноября 2018

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

2 голосов
/ 22 октября 2018

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

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

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

2 голосов
/ 14 марта 2016

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

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

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

enter image description here

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

0 голосов
/ 14 июня 2019

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

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

put Class Foo
{
public:
    __declspec(dllexport) int GetFoo() const;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...