Что означает #pragma comment
в следующем?
#pragma comment(lib, "kernel32")
#pragma comment(lib, "user32")
Что означает #pragma comment
в следующем?
#pragma comment(lib, "kernel32")
#pragma comment(lib, "user32")
#pragma comment
- это директива компилятора, которая указывает Visual С++ оставить комментарий в сгенерированном объектном файле. Затем комментарий может быть прочитан компоновщиком при обработке объектных файлов.
#pragma comment(lib, libname)
сообщает компоновщику добавить библиотеку libname в список зависимостей библиотеки, как если бы вы добавили ее в свойства проекта в Linker->Input->Additional dependencies
Смотрите # pragma comment в MSDN
Я всегда называл их "директивами компилятора". Они направляют компилятор делать что-то, разветвляясь, включая libs, как показано выше, отключая определенные ошибки и т.д. На этапе компиляции.
Компании-компиляторы обычно создают свои собственные расширения, чтобы облегчить их функции. Например, (я полагаю) Microsoft начала сделку "#pragma once", и это было только в продуктах MS, теперь я не уверен.
Прагматические директивы Он включает в себя "#pragma comment" в таблице, которую вы увидите.
НТН
Я подозреваю, что GCC, например, имеет свой собственный набор # прагмы.
Эти ссылки в библиотеках, выбранных в MSVС++.
Директивы Pragma указывают параметры компилятора операционной системы или машины (x86 или x64 и т.д.). Доступно несколько вариантов. Подробности можно найти на странице https://msdn.microsoft.com/en-us/library/d9x1s805.aspx
#pragma comment( comment-type [,"commentstring"] )
имеет этот формат.
См. Https://msdn.microsoft.com/en-us/library/7f0aews7.aspx для получения информации о разных типах комментариев.
#pragma comment(lib, "kernel32") #pragma comment(lib, "user32")
Вышеупомянутые строки кода включают имена библиотек (или путь), которые необходимо искать компоновщиком. Эти данные включены как часть записи в библиотеке в объектном файле.
Итак, в этом случае kernel.lib
и user32.lib
просматриваются компоновщиком и включаются в окончательный исполняемый файл.
Ответы и документация, предоставленные MSDN, являются лучшими, но я хотел бы добавить один типичный случай, который я часто использую, который требует использования #pragma comment
для отправки команды компоновщику во время соединения, например
#pragma comment(linker,"/ENTRY:Entry")
приказать компоновщику изменить форму точки входа WinMain()
на Entry()
, после чего CRTStartup
собирается передать управление на Entry()