Добавление библиотеки Bonjour (dns_sd.h) в Qt в Windows


person sonics876    schedule 02.12.2010    source источник


Ответы (3)


.Lib, распространяемый Apple, может использоваться только в том случае, если вы компилируете приложение Qt с помощью компилятора MSVC.

В противном случае, как вы сказали, вам понадобится библиотека, совместимая с GCC (.a). Для этого вам необходимо проделать следующие шаги:

  1. Запустите инструмент reimp tool [0] на .lib: reimp dnssd.lib. Будет создан файл DLLStub.obj.
  2. Запустите инструмент gendef [1] для .dll: gendef dnssd.dll. Будет создан файл dnssd.def. .Dll можно получить из: C:\Windows\System32, если вы используете 32-битную версию, или из C:\Windows\SysWOW64 для 64-битной версии.
  3. Соберите окончательный .a: dlltool -k -d dnssd.def -l libdnssd.a.
  4. Добавьте правильный путь в файл .pro во вновь созданную библиотеку: LIBS += -L"/path/to/the/library/file" -ldnssd

[0] - http://sourceforge.net/projects/mingw/files/MinGW/Extension/mingw-utils/mingw-utils-0.4-1/

[1] - http://sourceforge.net/projects/mingw/files/MinGW/Extension/gendef/gendef-1.0.1346/ - gendef - лучшая альтернатива pexports, потому что он может преобразовывать библиотеки типа stdcall из MSVC в библиотеки GCC, так что вы можете получить правильный .def файл.

PS: Я знаю, что автор заставил это работать, но я чувствовал, что должны быть более подробные инструкции о том, как это сделать - информация разбросана по Интернету.

person Timotei    schedule 04.07.2012
comment
Привет, я преобразовал файл dnssd.lib в libdnssd.a, но QT все еще жалуется на ту же ошибку: «UINT8» не называет тип. - person Jerry; 13.08.2014
comment
@Jerry Ну, это, конечно, не проблема связывания, а проблема компиляции :) Это означает, что, вероятно, вы не включаете правильный заголовок (-ы). - person Timotei; 25.08.2014
comment
Я только что загрузил Bonjour SDK. reimp не работает с dnssd.lib из Bonjour SDK reimp: dnssd.lib: неверная или поврежденная библиотека импорта - person user2757704; 10.07.2015

Попробуйте добавить

DEFINES += _WIN32

в файл вашего проекта.

person hmuelner    schedule 03.12.2010

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

person sonics876    schedule 17.12.2010
comment
Привет, не могли бы вы дать некоторые подробности. Мне не удалось решить ошибку компиляции. - person Jerry; 13.08.2014