Как создать файл .lib и файл .exe в Visual C ++? - PullRequest
13 голосов
/ 17 апреля 2010

В настоящее время у меня есть консольный проект, который создает файл .exe; Я хочу, чтобы он также создал файл .lib, чтобы другие проекты, скомпилированные как DLL, могли вызывать функции из исходного проекта.

Я знаю, что это возможно, но я не мог найти, как это сделать. Как мне сказать компоновщику, чтобы он тоже связывал .lib?

Ответы [ 5 ]

17 голосов
/ 19 марта 2016

Публикуя это просто как ссылку, я знаю, что оригинальное сообщение было опубликовано очень давно, но это относится и к тем, кому нужно решение этой проблемы.

Перейдите к проекту, для которого вы хотите создать .lib-файл, и выполните следующие действия:

  1. Щелкните правой кнопкой мыши по проекту.
  2. Выберите Свойства.
  3. Выберите события сборки.
  4. Выберите событие Pre-Link.
  5. Наконец, в командной строке вставьте это:

    @ECHO ON @ECHO "$(VC_ExecutablePath_x86)\lib.exe" /out:"$(OutDir)$(ProjectName).lib" "$(IntermediateOutputPath)*.obj" "$(VC_ExecutablePath_x86)\lib.exe" /out:"$(OutDir)$(ProjectName).lib" "$(IntermediateOutputPath)*.obj"

Это вызовет инструмент lib для генерации файла lib из сгенерированных объектных файлов.

10 голосов
/ 17 апреля 2010

В целом это невозможно - статические библиотеки и исполняемые файлы - это совершенно разные виды животных. Способ справиться с этой ситуацией - создать два проекта - один для библиотеки, которая содержит все функции. и один для исполняемого файла, который является тонкой оболочкой, которая просто вызывает функции в библиотеке.

4 голосов
/ 10 марта 2011

Если экспортируется какой-либо символ в проекте приложения (.exe) (например, с помощью __declspec (dllexport)), будут сгенерированы файлы .exe и .lib Увидеть: Почему моя сборка проекта Visual C ++ .exe создает файлы .lib и .exp?

0 голосов
/ 23 февраля 2018

Удивительно, сколько авторов высокомерно настаивают на неправильном ответе, когда они просто не знают ответа.

Чтобы создать .lib, связанный с вашим .exe, поместите следующую строку в Pre-Link Event:

"$(VC_ExecutablePath_x86)\lib.exe" /out:"$(OutDir)$(ProjectName).lib" "$(IntermediateOutputPath)*.obj"
0 голосов
/ 17 апреля 2010

Вы не «также связываете библиотеку», вы создаете статический проект библиотеки. Последний вообще не вызывает компоновщик - вместо этого он компилирует все ваши файлы с cl /c и объединяет полученные .obj s в библиотеку, используя lib.exe.

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