【问题标题】:including library and dll into c++ project将库和 dll 包含到 c++ 项目中
【发布时间】:2012-10-10 15:33:44
【问题描述】:

我有一个第三方库(比如 tp.lib)和第三方 dll(比如 tp.dll),我需要在我的 C++ 项目中使用它们(我的项目制作了一个 dll,我们称之为 my.dll )。

我在头文件中包含了带有#pragma comment(lib, "libraryname") 的库 并且还在我的 C++ Visual Studio 项目的 configurationproperties->linker->additional library directory 中包含了库文件的路径。

代码编译和链接正常。但无法执行。当我使用依赖检查我是否遗漏了什么时,我观察到找不到 tp.dll。 tp.dll 位于 tp.lib 所在的同一库文件夹中。

我应该怎么做才能将 tp.dll 包含到 my.dll 中?

【问题讨论】:

  • 您想将 tp.dll 静态链接到 my.dll 中,这样您就可以只部署 my.dll 并且所有代码都在那里?或者您是否可以同时部署 tp.dll 和 my.dll 并且应用程序执行时不会出错?
  • 我想静态链接 tp.dll。所以我唯一要做的就是部署 my.dll。我怎样才能做到这一点?

标签: c++ visual-studio-2010 dll dynamic-linking


【解决方案1】:

DLL 有不同的搜索路径。下面引用docs

对于隐式和显式链接,Windows 首先搜索“已知 DLL”,例如 Kernel32.dll 和 User32.dll。然后 Windows 按以下顺序搜索 DLL:

  1. 当前进程的可执行模块所在目录。

  2. 当前目录。

  3. Windows 系统目录。 GetSystemDirectory 函数检索此目录的路径。

  4. Windows 目录。 GetWindowsDirectory 函数检索此目录的路径。

  5. PATH 环境变量中列出的目录。

注意 未使用 LIBPATH 环境变量。

【讨论】:

    【解决方案2】:

    运行时的搜索路径不包括您放置 lib 库的文件夹,因此将 DLL 与 lib 一起放置不会使操作系统在运行时找到它。您可以将其添加到路径中,或移动 DLL。 list of search precedence is on MSDN

    【讨论】:

      【解决方案3】:

      您不能“将 dll 包含到另一个 dll 中”。您需要将它们部署在一起,或者将依赖dll放在Windows will find it的位置。

      【讨论】:

      • 当您说“将它们部署在一起”时,该怎么做?
      • 只需将它们复制到同一个文件夹中,即提供的链接中的第 1 点)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 2018-09-07
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多