首页 > 解决方案 > 无法打开 curl/libcurl_a_debug.lib

问题描述

在我当前的项目中,我使用的是libcurl以前由 powershell 安装的库。我正在使用#include "curl/curl.h"和编译作品,但我有一个链接错误,上面写着:

:LNK1104:cannot open file curl/libcurl_a_debug.lib

我没有这个文件。在我当前的目录中,我发现只有libcurl.lib. Additional library directories我已经在and中添加了目录的路径Additional include directories。我想知道有没有其他方法可以解决这个错误。在发布模式下,我遇到链接器无法打开文件的错误libcurl_a.lib。另一方面,在调试文件夹中,我有一个libcurl-d.lib文件。

标签: c++visual-studiocurl

解决方案


根据 Microsoft Docs,此问题有几个常见原因:

  • 库文件的路径可能不正确,或者没有用双引号括起来。或者,您可能没有将其指定给链接器。
  • 您可能已经安装了 32 位版本的库,但您正在构建 64 位版本,或者相反。
  • 该库可能依赖于其他未安装的库。

顺便说一句,你能补充一下libcurl.libProperties->Linker->Additional Dependencies?如果没有,您可以添加它。

您可以尝试使用编译语句而不是设置。

#ifdef _DEBUG
#pragma comment(lib,"..\\debug\\lib name")
#else
#pragma comment(lib,"..\\release\\lib name")
#endif 

另外,我阅读了curl的官方文档。有Windows链接错误的描述:

5.7 在 Windows 上构建 libcurl 时出现链接错误!

您需要确保您的项目及其链接的所有库(静态和动态)都针对同一个运行时库进行编译/链接。

这是由命令行编译器的 /MD、/ML、/MT(及其对应的 /M?d)选项确定的。/MD(链接到 MSVCRT dll)似乎是最常用的选项。

构建使用静态 libcurl 库的应用程序时,必须将 -DCURL_STATICLIB 添加到 CFLAGS。否则链接器将寻找动态导入符号。如果您使用的是 Visual Studio,则需要在“预处理器定义”部分添加 CURL_STATICLIB。

如果您收到诸如“未知符号__imp__curl_easy_init ...”之类的链接器错误,则您链接到了错误的(静态)库。如果要使用 libcurl.dll 并导入 lib,则不需要任何额外的 CFLAGS,但使用下面的导入库之一。这些是由各种 lib/Makefile.* 文件生成的库:

Target: static lib. import lib for libcurl*.dll.
-----------------------------------------------------------
MingW: libcurl.a libcurldll.a
MSVC (release): libcurl.lib libcurl_imp.lib
MSVC (debug): libcurld.lib libcurld_imp.lib
Borland: libcurl.lib libcurl_imp.lib

我建议你可以试试这个方法。


推荐阅读