【问题标题】:How to include a dll file that is been wrapped into a new dll?如何包含已包装到新 dll 中的 dll 文件?
【发布时间】:2010-08-25 19:02:11
【问题描述】:

在我的应用程序中,我必须明确链接到一个 dll。该应用程序在 QT 中,带有 gcc 编译器。

应用程序必须链接到的 dll 是另一个旧 dll 的包装器。目的是使旧的 dll 适合新的界面。

我在编译新的 dll 时使用隐式链接。新的dll是用msvc 2008编译的。原因是旧的dll有c++类函数,gcc无法识别。新接口使用 c 函数。

所以大局是,当我运行我的应用程序时,我链接了新的 dll,而新的 dll 依赖于旧的 dll。一切正常,除了我必须将旧 dll 放在与 exe 相同的文件夹或与 .pro 文件相同的文件夹中。

我尝试将旧库添加到应用程序的 qt .pro 文件中,但没有成功。

有什么办法可以移动旧dll文件的目录吗?

为了更清楚地说明,如果旧的 dll 和应用程序是使用相同的编译器编译的,我可以在 .pro 文件中包含旧 dll 和 lib 的路径并将其放在我想要的任何位置。

但是,现在,只有新的 dll 可以识别旧的 dll 函数,所以我不能再这样做了。我想知道是否有办法修改exe文件在运行时搜索的路径。现在它搜索exe 文件夹及其父文件夹。

【问题讨论】:

  • 我不明白这个问题,为什么必须移动它?你给了它一个不同的名字,对吧?
  • 我希望它与其他库一起在 lib 文件夹中,而不是在自动生成且通常不包含在源代码控制管理软件中的调试或发布文件夹中。换句话说,我只是不认为 dll 应该在那里。

标签: c qt dll linker


【解决方案1】:

Windows 操作系统以指定方式查找 dll,以下链接可能会有所帮助: Dynamic-Link Library Search

如果您想将 dll 保存在另一个文件夹中,则将 lib 文件夹添加到您的 PATH 变量中将起作用,但是当您部署包时,您必须确保可以使用以下命令找到目标计算机上的 dll链接中指定的库搜索顺序。

【讨论】:

  • 谢谢史蒂文,这真的很有帮助。
【解决方案2】:

我尝试使用 SetDllDirectory 修改 dll 搜索顺序,这是 Steven 的回答中的链接中提到的。然而,它似乎只是一个 msvc 函数。 (我不确定,但我包含了 mingw winbase.h 文件,它仍然无法识别它。)

所以我尝试使用 putenv 修改 PATH 变量,它可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2020-08-31
    • 2011-12-11
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    相关资源
    最近更新 更多