Почему Qt Creator может правильно связать dll без .lib и LoadLibrary ()? - PullRequest
1 голос
/ 14 мая 2019

Обычно, когда мы ссылаемся на dll, мы также должны использовать .lib, чтобы компоновщик мог сказать, что это динамическое связывание.Однако в Qt Creator мы можем сделать это без него.

Я следовал инструкции на youtube, и я просто выполнил следующий процесс:

  1. Подготовил TestMessagePack.dll, скомпилированный GCC;
  2. Скопируйте dll в папку отладки, в которой находится исполняемый файл.
  3. Добавьте приведенные ниже коды, которые также указывают, где находятся включаемые файлы.
INCLUDEPATH += "C:\Users\***\Desktop\Brand New\CMakeStuff\include\qmsgpack"

LIBS += "C:\Users\***\Desktop\Brand New\CMakeStuff\bin\TestMessagePack.dll"
сборка и запуск.

Без шага 2 компоновщик не будет работать.Это очевидно, что Qt Creator может ссылаться на dll без .lib.Но как компоновщик может узнать без .lib файла?

Мне нужно знать принцип внутри

1 Ответ

1 голос
/ 14 мая 2019

Вы используете один из различных MinGW ??Порты Windows GCC.В Windows компоновщик цепочки инструментов GCC (ld) поддерживает прямое связывание библиотек DLL, в отличие от компоновщика Microsoft, которому требуется библиотека импорта прокси .lib. Документация :

прямая ссылка на dll

Порты cygwin / mingw ld поддерживают прямую связь, включая символы данных,в dll без использования каких-либо библиотек импорта.

...

и MinGW: укажите библиотеки для компоновщика для использования

MinGW поддерживает библиотеки, названные в соответствии с соглашениями ".lib" и ".dll", в дополнение к обычному соглашению "lib.a", распространенному в * nix системах.

...

Это поведение дано MingGW ??линкер, который вы используете.Это означает, что связывание динамических библиотек с ld может быть выполнено так же, как в Windows, так и в Unix-подобных ОС, где не существует библиотек импорта.Qt не имеет значения.

...