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

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

Запутанный?


    --- header file ----
    class foo {
    public:
      foo() {;}
      virtual ~foo() = 0;

      virtual bool overrideMe() {return false;}
    };

    ---- source ----
    foo::~foo()
    {
    }

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

Для создания класса интерфейсный класс требует чистого виртуального метода, но все виртуальные методы имеют реализации по умолчанию, таким образом, единственный метод, оставленный сделать чистым виртуальный, является деструктором.

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

35
задан denfromufa 18 October 2018 в 15:52
поделиться

4 ответа

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

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

4
ответ дан 27 November 2019 в 07:18
поделиться

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

0
ответ дан 27 November 2019 в 07:18
поделиться

On the command line use:

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

or, if you prefer the more verbose & explicit version:

cl.exe /D_USRDLL /D_WINDLL <files-to-compile> <files-to-link> /link /DLL /OUT:<desired-dll-name>.dll
38
ответ дан 27 November 2019 в 07:18
поделиться

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

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

Я знаю, что ссылка требует /dll в качестве аргумента.

Да.

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

lib используется только для создания статических библиотек (или для добавления .objs в вашу implib). Link создаст для нее и .dll, и импортную .lib.

1
ответ дан 27 November 2019 в 07:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: