Как создать как .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 из созданных объектных файлов.
Ответ 3
Если какой-либо символ в проекте (.exe) экспортируется (например, с помощью __declspec (dllexport)), будут генерированы файлы .exe и .lib
Видеть:
Почему моя сборка Visual С++.exe создает файлы .lib и .exp?
Ответ 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"