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

时间:2014-02-19 13:56:58

标签: windows qt dll

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

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

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

我做了以下事情:

  • 将我的程序与所有必需的库(包括 libeay32.dll)外部到Qt并运行它(这是成功的)。
  • 之后我尝试在QT内运行,但在运行之前在构建中使用libeay32库(这很成功)

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

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

有没有办法这样做而不必复制这个DLL?

我的本​​能就是修复Path指向这首先会有所帮助,因为这可以确保在其他dirs中可能出现的任何其他事件之前拉动DLL。

注意:在引用PATH变量时,我的意思是SYSTEM路径和检查PATH Qt使用(Qt在路径中添加几个dirs)

提前感谢您的帮助。

1 个答案:

答案 0 :(得分: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键。