【问题标题】:Working with DLL in a C++ application在 C++ 应用程序中使用 DLL
【发布时间】:2012-03-19 06:50:59
【问题描述】:

我打算在我的应用程序中使用id3lib。我正在寻找一种将库用作 DLL 的方法。我注意到他们以各种形式发布了该库:其中之一是 windows binary。我在 Windows 中的目标平台,我将使用 Qt 4.8。在我解压 Windows 二进制文件后,我在 Release 文件夹中找到了以下文件:

  • id3lib.dll
  • id3lib.exp
  • id3lib.lib

我知道如何在 Qt 中使用 DLL,给定 DLL、一个或多个函数原型所在的头文件,以及有或没有 *.lib 文件。这个包不带头文件。

我应该如何在没有任何头文件的情况下使用这个包? *.lib 和 *.exp 文件的目的是什么?据我所知,*.lib 文件用于与我的程序中不需要的函数进行静态链接。

【问题讨论】:

  • 您的问题是特定于 Windows 的,应该这样标记。
  • @BasileStarynkevitch:是的,对不起,我忘了。

标签: c++ windows dll id3lib


【解决方案1】:

您刚刚错过了标题。它位于 include 子文件夹下(请参阅 here),即使您将使用 DLL,仍然需要 .lib 文件进行链接。

【讨论】:

  • 我有id3lib的完整源代码。 windows 二进制部分不附带任何头文件。我怎么知道我应该使用哪个头文件?
  • @Donotalo:点击罗伯特答案中的链接。它带你直接到 id3.h。
  • @HarryJohnston:id3.h 不是要包含的文件。它是此处描述的 tag.h:id3lib.sourceforge.net/api/index.html。但是,我尝试了它们,但仍然无法解决一些未引用的链接。
  • @Donotalo:您是从编译器还是从链接器收到错误消息?哪些功能/符号未定义?
  • @HarryJohnston:这是另一个问题:stackoverflow.com/questions/9786022/…
【解决方案2】:

通常的做法是在C++文件中使用#included头文件,链接到.lib文件,运行时需要.dll。

头文件应该/可能在另一个包中,因为同一个头文件可能用于不同类型的链接策略。

在最坏的情况下,您应该能够使用诸如depends.exe 之类的工具来查看导出的符号并创建您自己的h 文件以进行匹配 - 但最好找到随发行版发布的.h 文件。

【讨论】:

    猜你喜欢
    • 2010-10-08
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    相关资源
    最近更新 更多