将 DLL 链接到 C++ 程序 QTCreator

linking DLL's into c++ program QTCreator

本文关键字:程序 QTCreator C++ DLL 链接      更新时间:2023-10-16

我对这个概念有点陌生,并且在运行时加载库时遇到了一些问题。在我正在使用的开发机器上,库似乎已正确加载,程序将始终正常运行,但是当我编译此程序并将其移动到具有所需 DLL 的另一台计算机上时,它们无法加载。我认为发生这种情况的主要原因是因为未加载的 DLL 位于系统上某处的文件夹中(如 C:\windows\system32),而大多数其他计算机上都不存在。

我的问题是,如果我提供具有所需功能的自定义 DLL 并将其与程序一起提供,如何让它在 QTCreator 中正确链接?我已经尝试了 -l 和 -L 标志的组合(例如:-llibname -LC:\path\to\where\dll\will\be),但这似乎也没有解决问题。另一个令人惊讶的事情(无论如何对我来说)是,即使程序运行需要DLL,该程序仍然成功启动了其他计算机。

如果有人有任何建议或教程,我可以阅读,我将不胜感激。

首先,您应该阅读Windows如何查找DLL以加载它们。

其次,一旦您知道该过程的工作原理,您就可以考虑将 DLL 与您的应用程序一起交付,以便在其他机器上运行时问题消失。您应该检查您是否有权执行此操作,如果他们是第三方 DLL。

第三,Windows依赖关系walker工具在运行时诊断DLL加载问题方面非常出色。只需在其中加载一个.exe并按 F7 即可开始分析。它将显示应用程序加载的所有 DLL 以及从何处加载。

最后,我不知道 QTCreator,但我想您需要做的就是使用正确的开关将.lib文件传递给它(此链接表明-L是正确的开关,FWIW)。