Как создать как .lib файл, так и файл .exe в Visual С++?

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

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

Ответы

Ответ 1

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

Ответ 2

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

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

  • Щелкните правой кнопкой мыши проект.
  • Выберите "Свойства".
  • Выберите "События сборки".
  • Выберите событие предварительной привязки.
  • Наконец, в командной строке вставьте это:

    @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 из созданных объектных файлов.

Ответ 4

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

Ответ 5

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

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

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