用于部署使用外部lib的应用程序的正确构建选项

时间:2014-05-25 10:21:49

标签: c++ linker codeblocks

我正在尝试制作一个小型C ++程序,它可以检索网页并进行一些操作。我希望cURL获取我网站的内容。我下载了libcurl

我的IDE是Code :: Blocks。 我已将以下参数添加到我的项目构建选项中:

enter image description here

运行良好,但仅限于IDE。当我尝试从explorer.exe运行我的可执行文件时,我收到一条消息,说我因为缺少libcurl.dll而无法运行程序。如何解决这个问题?

我的编译器是MinGW。

2 个答案:

答案 0 :(得分:2)

对此的解释是C :: B用于在IDE中运行程序的工具, cb_console_runner.exe,“帮助”添加您指定的链接器搜索目录 项目到运行时DLL搜索顺序。

因此,您已将curl-windows\bin指定为链接器搜索目录, 这就是libcurl.dll的位置,您的程序在cb_console_runner.exe运行时找到它。 但由于curl-windows\bin不在 Windows DLL搜索顺序中,因此找不到DLL 直接运行可执行文件时。

验证这一点: -

  • 成功构建项目
  • 在IDE中成功运行
  • 暂时从链接器搜索目录中删除curl-windows\bin
  • 再次从IDE运行,无需重建。

在第二次运行时,您将收到丢失的libcurl.dll错误。

为了能够直接运行您的程序,必须找到libcurl.dll Windows DLL search order

顺便说一句,将libcurl.alibcurldll.a链接起来毫无意义。 如果您要使用DLL,请不要链接libcurl.a

事实上,只要您链接libcurldll.a,请将curl-windows\bin指定为 链接器搜索目录是没有意义的,因为你需要在构建时,它的存​​在 只会导致运行时混淆您的问题。

答案 1 :(得分:1)

您需要将cURL dll与可执行程序一起分发(部署),或者您必须确保Windows将在dll搜索路径中找到该dll。通常,找到excutable的目录和当前目录是dll搜索路径的一部分。这与您的开发环境和/或编译器无关。 欢迎来到DLL地狱!