Я создаю набор библиотек DLL C++ и их библиотек импорта в VisualStudio (2013). До сих пор все они были сгенерированы компоновщиком одновременно. Мои библиотеки DLL используют символы из других библиотек, которые включены в качестве дополнительных зависимостей в редакции свойств/ссылки.
Иногда генерация DLL завершается сбоем из-за отсутствия библиотек импорта, что меня вполне устраивает, но в этом случае также нет сгенерированного файла .lib. Я хотел бы сгенерировать библиотеки импорта (моих DLL), даже если библиотеки DLL не могут быть выполнены, чтобы позволить другим проектам полагаться на символы, которые я буду экспортировать, прежде чем я смогу предоставить весь материал.
Я нашел обходной путь через командную строку события предварительной ссылки:
LIB /DEF:(...)\myLib.def /OUT:(...)\myLib.lib $(IntDir)*.obj
Это создает именно то, что мне нужно, когда у меня есть файл .def.
Проблема в том, что у меня чаще всего нет такого файла .def, а вместо этого я полагаюсь на инструкции __declspec(dllexport)
, и в таком случае я не нашел способа получить правильный результат.
Я пытался:
LIB /OUT:(...)\myLib.lib $(IntDir)*.obj
(#1)
Это создает (статический?) файл lib, а не библиотеку импорта, не то, что мне нужно.LIB /DEF /OUT:(...)\myLib.lib $(IntDir)*.obj
(#2)
Это завершается ошибкой 1104 из-за отсутствия (других) библиотек импорта.
Что еще более озадачивает меня, так это то, что командная строка (# 2) не работает с библиотеками, которые должны быть здесь (на самом деле они найдены компоновщиком). Мне интересно, должен ли я предоставлять полные аргументы командной строки LINK команде LIB, и в этом случае это было бы невозможно.
Я не большой специалист по инструментам компиляции/связывания, боюсь, я, вероятно, делаю довольно неправильные вещи...
Кто-нибудь знает простой способ удовлетворить мою потребность без использования файла .def? Есть ли в компоновщике возможность запрашивать создание библиотеки импорта из объявленных символов __declspec(dllexport)
и генерировать ее, даже если DLL не может связать?