Подтвердить что ты не робот

Как создать DLL из командной строки в Windows с помощью MSVC

Я занимаюсь C около 20 лет, но никогда не создавал DLL; Я всегда предпочитал статически ссылаться.

Я использую командную строку - cl.exe, etc - и gnumake makefiles для создания приложений Windows.

Теперь я хочу создать DLL, и я запутался.

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

Я смотрю на строки команд для lib и link, и для меня не очевидно, что именно должно быть сделано, для создания этого вывода.

У меня есть несколько вопросов:

Требуется ли cl каких-либо дополнительных аргументов, чтобы указать, что они компилируются для DLL? (Я знаю, что прототипы, экспортированные DLL, нуждаются в __declspec (dllexport)).

Я знаю ссылку /dll как аргумент.

Я запустим lib и link, чтобы создать .lib и .dll соответственно, или свяжутся с продуктом как?

Что еще мне нужно знать?

4b9b3361

Ответ 1

Оказывается, это происходит автоматически.

Если вы экспортировали функции (например,/export, __declspec (dllexport) и т.д.), компоновщик автоматически сгенерирует .lib файл (вы, конечно же, нуждаетесь /dll в командной строке компоновщика).

Ответ 2

В командной строке используйте:

cl.exe /LD <files-to-compile>

или, если вы предпочитаете более подробную и явную версию:

cl.exe /D_USRDLL /D_WINDLL <files-to-compile> <files-to-link> /link /DLL /OUT:<desired-dll-name>.dll

Ответ 3

Требуется ли cl каких-либо дополнительных аргументов, чтобы указать, что они компилируются для DLL? (Я знаю, что прототипы, экспортированные DLL, нуждаются в __declspec (dllexport)).

С тех пор как Win3x ушел, теперь вам просто нужен либо __declspec(dllexport), либо файл .DEF, который определяет имена символов, которые вы хотите экспортировать. файл .def позволяет экспортировать символы с измененными именами, поэтому он может быть полезен для особых случаев.

Я знаю ссылку /dll как аргумент.

Да.

Я запустим lib и link, чтобы создать .lib и .dll соответственно, или свяжутся с продуктом как?

lib используется только для создания статических библиотек (или для добавления .objs в ваш implib) Ссылка создаст как .dll, так и import.lib для него.

Ответ 4

Ответ Simlar на Ebow Halm, но с использованием файла .def для перечисления экспортированных функций и новых аргументов командной строки:

"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat" && cl /O2 /Iall /Iyour /Iincludes /D_USRDLL /D_WINDLL /DOTHER_DEFINES <libs> <source files> /LD /Fe<dll name> /link /DEF:<def name>.def

Литература:

Ответ 5

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