【问题标题】:Adding Bonjour (dns_sd.h) library to Qt in Windows在 Windows 中将 Bonjour (dns_sd.h) 库添加到 Qt
【发布时间】:2010-12-02 23:42:24
【问题描述】:

我一直在尝试正确添加 Apple 提供的开源 dns_sd.h 库。我正在编写一个使用 BonjourRegistrar 类的程序,如下所示: link text

我已经在 Mac 环境下编写了我的程序,现在我正在尝试将它移植到 Windows。 Bonjour SDK 带有几个类,我很困惑如何正确地将类添加到我的 Qt 项目中。我已经尝试添加该行:

win32:LIBS += c:\dnsssd.lib

在 .pro 文件中没有成功。另外,我尝试将 dns_sd.h 和 dns_sd.c 文件添加到我的项目中,但出现了一些错误,例如:

'UINT8': 没有命名类型 'INT8':没有命名类型 'UINT16' 没有命名类型 'INT16' 没有命名类型

最后,我现在正在尝试修改此链接中 xcimo 所描述的 lib 文件 link text

我不知道我是否使用正确的命令来正确修改这些文件。

【问题讨论】:

    标签: windows qt bonjour


    【解决方案1】:

    Apple 分发的 .lib 只能在您使用 MSVC 编译器编译 Qt 应用程序时使用。

    否则,就像您说的那样,您需要一个与 GCC 兼容的库 (.a)。为此,您需要执行以下步骤:

    1. 在 .lib:reimp dnssd.lib 上运行 reimp 工具 [0]。将生成一个文件DLLStub.obj
    2. 在 .dll 上运行 gendef 工具 [1]: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:我知道作者搞定了它,但我觉得应该有一些关于如何完成它的更详细的说明——这些信息分散在互联网上。

    【讨论】:

    • 您好,我已将 dnssd.lib 文件转换为 libdnssd.a,但 QT 仍在抱怨同样的错误,'UINT8' 没有命名类型。
    • @Jerry 好吧,这当然不是链接问题,而是编译问题 :) 这意味着您可能没有包含正确的标头。
    • 我刚刚下载了 Bonjour SDK。 reimp 失败,来自 Bonjour SDK 的 dnssd.lib “reimp:dnssd.lib:无效或损坏的导入库”
    【解决方案2】:

    尝试添加

    DEFINES += _WIN32
    

    到您的项目文件。

    【讨论】:

      【解决方案3】:

      我想通了,你需要使用reimp和dll工具将lib库修改为.a

      【讨论】:

      • 您好,请提供一些细节。我没有运气解决编译错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多