QT 运行构建时不包括正确的库

Posted

技术标签:

【中文标题】QT 运行构建时不包括正确的库【英文标题】:QT Not including the correct library when running a build 【发布时间】:2014-02-19 13:56:58 【问题描述】:

我正在使用带有 Mingw 的 Qt Creator 5.2.1(32 位)构建一个程序。该程序的依赖项之一是 libcurl 库。

QT 正在正确构建文件,但是在运行时会抛出错误 139。

在二进制文件上运行依赖walker 后,我注意到libcurl dll 又依赖于另一个名为“libeay32.dll”的dll。

我做了以下事情:

复制了我的程序以及所有必需的库(包括 libeay32.dll) 到 Qt 外部并运行它(这是成功的)。 之后我尝试在 QT 中运行,但在运行之前在构建中包含 libeay32 库(这很成功)

从逻辑上讲,我后来推测,如果我将 libeay32 的路径放在我的 PATH 变量中的任何其他路径之前,它将拉取正确版本的 lib(回复:对问题 here 的回答)。但是这不起作用,抛出相同的错误 139(显然没有找到库)

我知道我可以通过简单地将文件复制到我的工作目录中来运行和测试我的程序,但是,为了提供信息,我想知道;

有什么方法可以做到这一点而不必复制这个 DLL?

我的直觉是,首先修复指向此路径的路径会有所帮助,因为这将确保在其他目录中可能存在的任何其他事件之前使用 DLL。

注意:在提到 PATH 变量时,我指的是 SYSTEM 路径和检查 Qt 使用的 PATH(Qt 在路径中添加了一些目录)

提前感谢您的帮助。

【问题讨论】:

"Qt" 不会向路径添加任何内容,“QT”也不会构建任何内容。 Qt Creator 在构建或运行项目之前会修改 PATH 变量。您可以控制此类更改。 qmake 生成生成文件。 jom 做建筑。请不要将 Qt Creator、qmake、jom 和 Qt 混为一谈。它们分别是独立的 IDE、makefile 生成器、并行 make 和应用程序开发框架。 【参考方案1】:

要么您链接静态,要么您必须确保您的库位于以下位置之一 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx#standard_search_order_for_desktop_applications):

加载应用程序的目录。 当前目录。 系统目录。使用 GetSystemDirectory 函数获取该目录的路径。 16 位系统目录。没有函数获取这个目录的路径,但是搜索到了。 Windows 目录。使用 GetWindowsDirectory 函数获取该目录的路径。 PATH 环境变量中列出的目录。请注意,这不包括 App Paths 注册表项指定的每个应用程序路径。计算 DLL 搜索路径时不使用 App Paths 键。

【讨论】:

以上是关于QT 运行构建时不包括正确的库的主要内容,如果未能解决你的问题,请参考以下文章

使用 cmake (windows) 构建时不显示 Qt 资源

C++/Qt 发行版中的库链接

在我的构建输出中包含 Nuget 依赖项?

如何在Windows下构建ARM Linux QT开发环境

如何在VS2012下静态构建Qt 4.8/5.2,使用静态MSVC运行时,支持Windows XP?

如何创建可以从 C 调用的基于 Qt 的库