C++ LibCurl-释放静态库链接问题

C++ LibCurl-释放静态库链接问题,c++,c,visual-c++,curl,libcurl,C++,C,Visual C++,Curl,Libcurl,我这样做已经有一段时间了。我希望有人能告诉我我做错了什么 以下是我迄今为止采取的步骤: -下载了cURL的最新版本(7.21.7) -使用vc6curl.dsw在Visual Studio 2010中打开解决方案,并将项目转换为VS2010 -将libcurl项目配置设置为“release”并生成。生成成功。已创建名为“LIB Release”的文件夹。它包含几个obj文件,“libcurl.lib”文件也驻留在这里 测试应用: -在项目的设置中,我将编译器指向curl includes(头)

我这样做已经有一段时间了。我希望有人能告诉我我做错了什么

以下是我迄今为止采取的步骤:

-下载了cURL的最新版本(7.21.7)

-使用vc6curl.dsw在Visual Studio 2010中打开解决方案,并将项目转换为VS2010

-将libcurl项目配置设置为“release”并生成。生成成功。已创建名为“LIB Release”的文件夹。它包含几个obj文件,“libcurl.lib”文件也驻留在这里

测试应用:

-在项目的设置中,我将编译器指向curl includes(头)

C/C++>>常规>>其他包含目录

-在预处理器定义中添加了“CURL_STATICLIB”

C/C++>>预处理器定义

-在我的链接器中添加了“libcurl.lib”文件夹的路径附加库依赖项

链接>>常规>>其他库目录

-在我的链接器中添加了“libcurl.lib”附加依赖项

链接>>输入>>其他依赖项

-将我的项目配置设置为“Realease”并点击build

我收到42个未解决的外部错误:

错误65错误LNK1120:42未解决 外部C:\Users\Nick\Documents\Visual Studio 2010\Projects\curl\u static\u lib\Release\curl\u static\u lib.exe curl\u static\u lib 错误61错误LNK2001:未解析的外部符号 ___WSAFDIsSet@8C:\Users\Nick\Documents\Visual Studio 2010\Projects\curl\u static\u lib\curl\u static\u lib\libcurl.lib(select.obj)curl\u static\u lib 错误59错误LNK2001:未解析的外部符号 _小鬼_accept@12C:\Users\Nick\Documents\Visual Studio 2010\Projects\curl\u static\u lib\curl\u static\u lib\libcurl.lib(ftp.obj)curl\u static\u lib 错误46错误LNK2001:未解析的外部符号 _导入免费C:\Users\Nick\Documents\Visual Studio 2010\Projects\curl\u static\u lib\curl\u static\u lib\libcurl.lib(ldap.obj)curl\u static\u lib 错误26错误LNK2001:未解析的外部符号 _小鬼_bind@12C:\Users\Nick\Documents\Visual Studio 2010\Projects\curl\u static\u lib\curl\u static\u lib\libcurl.lib(connect.obj)curl\u static\u lib


我也尝试过使用“调试”配置构建。有人能告诉我哪里出错了吗?

这些错误意味着libcurl使用的函数不在链接器配置中指定的任何导入库中

听起来至少应该有套接字导入库(ws2_32.lib)


请注意,如果将libcurl编译为DLL,则所有导入库都指定为DLL链接的一部分,因此应用程序不需要导入所有这些库,只需要针对curl导入库进行链接。选择将curl编译为静态库的事实使curl代码成为应用程序的一部分,因此必须在应用程序的链接器配置中提供所有支持库。

这些错误意味着libcurl使用的函数不在链接器配置中指定的任何导入库中

听起来至少应该有套接字导入库(ws2_32.lib)


请注意,如果将libcurl编译为DLL,则所有导入库都指定为DLL链接的一部分,因此应用程序不需要导入所有这些库,只需要针对curl导入库进行链接。您选择将curl编译为静态库,这使得curl代码成为应用程序的一部分,因此必须在应用程序的链接器配置中提供所有支持库。

为windows构建curl的最佳方法是将NMake与提供的makefile一起使用。 你可以

  • 修改CURL根文件夹中的Makefile以设置您使用的VC版本,然后运行
    nmake VC all
    (或者选择适合您的任何其他VC目标)。检查./docs/INSTALL文件的“Win32”部分

  • 使用./winbuild文件夹中的Makefile.vc。检查./winbuild/BUILD.WINDOWS.txt了解如何使用它


  • 为windows构建CURL的最佳方法是在提供的makefile中使用NMake。 你可以

  • 修改CURL根文件夹中的Makefile以设置您使用的VC版本,然后运行
    nmake VC all
    (或者选择适合您的任何其他VC目标)。检查./docs/INSTALL文件的“Win32”部分

  • 使用./winbuild文件夹中的Makefile.vc。检查./winbuild/BUILD.WINDOWS.txt了解如何使用它


  • 该库是使用libcurl构建创建的,还是您建议我需要导入其他库?您需要从系统导入其他库,至少是ws2_32.lib,可能是其他库,具体取决于缺少哪些符号。当我得到未定义的符号时,我通常会在msdn中找到它们。文档通常说明符号所属的库,因此只需查找curl需要的所有依赖项即可。此库是使用libcurl构建创建的,还是您建议我需要导入其他库?您需要从系统导入其他库,至少是ws2_32.lib,可能还有其他库,取决于缺少哪些符号。当我得到未定义的符号时,我通常会在msdn中找到它们。文档通常说明符号所属的库,因此只需查找curl需要的所有依赖项即可。您可以尝试从./winbuild文件夹使用Makefile.vc或从./lib文件夹使用Makefile.vc8(9,10)使用NMAKE进行构建。只需在VS命令提示符下运行“nmake-f”!我已经多次尝试使用make文件,但我没有注意到有一个切换到Makefile版本10的开关。如果您想添加答案,我会检查它。您可以尝试从./winbuild文件夹使用Makefile.vc,或从./lib文件夹使用Makefile.vc8(9,10)使用NMAKE进行生成。只需在VS命令提示符下运行“nmake-f”!我已经多次尝试使用make文件,但我没有注意到如果您想添加答案,make文件的版本10会有一个切换