【问题标题】:how to solve libCurl linker error in Borland c++ (version 5.02)?如何解决 Borland c++(5.02 版)中的 libCurl 链接器错误?
【发布时间】:2011-10-02 17:28:06
【问题描述】:

我是 c/c++ 的新手......最近我正在尝试使用 libCurl 编译一个程序。但它向我显示了这些错误:

Error:  Error: Unresolved external '_curl_easy_init' referenced from D:\BC5\BIN\HTTP-POST.OBJ
Error:  Error: Unresolved external '_curl_easy_setopt' referenced from D:\BC5\BIN\HTTP-POST.OBJ
Error:  Error: Unresolved external '_curl_easy_perform' referenced from D:\BC5\BIN\HTTP-POST.OBJ
Error:  Error: Unresolved external '_curl_easy_cleanup' referenced from D:\BC5\BIN\HTTP-POST.OBJ

我在网上搜索了这些错误并知道这是链接器错误。我发现了很多关于这个问题的教程。但我无法理解。

请注意,我有 libcurl.dll 和很多头文件,我已将头文件复制到 D:\BC5\INCLUDE.... 现在我该怎么办?

【问题讨论】:

  • @Kerrek:这不适用于 Borland C++ Builder 5。它是 2000 年的 IDE。
  • @0A0D: 哦,对不起,我没发现这是 BC,我失明了。干杯。
  • 好老B5.2,好想你。 +1 仍在使用它
  • @Ulterior:我刚离开了一份工作,我用了 4 年半......很棒的 IDE 虽然已经过时了 :)

标签: c++ c++builder libcurl c++builder-5


【解决方案1】:

您的 DLL 需要一个导入库。您可以使用 borland 提供的 implib 实用程序从 DLL 创建一个。将生成的 .lib 包含在您的项目中,链接器错误应该会消失。如果它在运行时开始抱怨,请确保 DLL 与可执行文件位于同一文件夹中。

【讨论】:

  • 幸运的是我已经成功创建了 .lib 文件.....现在你能告诉我如何包含 .lib 文件吗?我将 lib 文件复制到“D:\BC5\LIB”中……我仍然收到这些错误……不知道怎么回事……请帮助我将 .lib 文件包含在我的项目中跨度>
  • @tuhin 您的问题听起来与this question 非常相似。对于 bcc,只需在链接时在末尾包含该导入库。
  • @Tuhin,您必须像添加 cpp 文件一样将 lib 添加到项目中。您可能必须在文件打开对话框中更改文件掩码,以便查看 lib 文件。抱歉,BC++ 对我来说是很久以前的事了。
  • @Victor T.--- 我看过那个问题,但我什么都不懂。截图和我的编译器(borland)没有任何相似之处.....
  • @Eelke----- 我已经打开了.lib 文件...我无法理解下一步该怎么做....打开.lib 文件后,我看到了一些无法识别的文字.....
【解决方案2】:

Eelke 是正确的,您需要导入 libcurl 库才能正确解决这些错误。到目前为止,根据您上面的 cmets,我假设您已经完成了以下操作:

  • 您已经在 ide 中设置了 libcurl 测试项目的基本布局。
  • 添加了必要的 include 和 lib 目录,以便在构建时可以正确定位 libcurl。
  • 您已正确创建了用于链接器的 libcurl.lib 导入文件。

有两种方法可以链接到所需的库:

  1. 使用工具链特定的#pragma 指令。例如,在一个源文件的顶部附近添加:

     // eg. main.cpp
     #include <stdio.h>
     #include <curl/curl.h>
    
     #pragma comment(lib, "libcurl.lib")
    
     // ...
    

  2. 将 libcurl 导入库添加到项目中。您可以通过右键单击项目名称->添加节点来做到这一点。在“添加到项目列表”窗口中,更改文件扩展名过滤器以查找 .lib。默认情况下,它以 C++ 源代码 开头。找到您之前导入的 libcurl.lib,然后单击打开。这会将导入库作为依赖项添加到项目中。

现在执行项目的重建(右键单击项目->构建节点),它应该可以工作了。

【讨论】:

  • 我似乎记得你必须运行一个 lib 转换器/tlbimp 程序。
  • @0A0d 如果他有 libcurl.dll,运行类似 implib -a libcurl.lib libcurl.dll 的东西应该足以创建导入。据我所知,所需的 curl 函数被导出为 C 函数,因此它应该是非常可互操作的。
  • 我就是这么想的。关键是要使用 Borland 的 implib 程序。
  • @victor t--- 我已经尝试过你的第一种方法,但不幸的是我收到了同样的错误。我将名称从“libcurl.lib”更改为“libcurl.libewrwrfewr(或类似名称)”。它向我显示“未找到”或类似这种错误消息。这证明当它是“libcurl.lib”时,编译器可以成功地包含该文件。但是我的链接器错误仍然可用......然后我在 Visual c++ 中尝试了这段代码,在那里我添加了那个 .lib 文件。但是编译器说 .lib 文件已损坏。
  • 我已经用 IMPLIB 工具创建了那个 .lib 文件。它需要 libcurl.dll 文件。但是 libcurl 并没有带着那个 .dll 文件来找我。我已经从互联网上下载了那个。现在我很困惑,因为我的 .lib 文件损坏,我是否收到此链接器错误????如果是这样,那么建议我现在应该做什么。如果不是,请告诉我这个问题背后的其他可能原因......请帮助我,我整天都在这个恼人的错误中度过..................
猜你喜欢
  • 2015-11-14
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多