C++ 向Code::Blocks IDE添加静态libcurl
我不知道如何正确地将静态libcurl库添加到我的Code::Blocks IDE中。我希望它是静态的,因为在我的程序运行时不需要.dll文件,默认情况下Windows不包含这些文件。我正在使用这个libcurl: (不带OpenSSL的minGW) 以下是我的全局编译器设置: 我得到以下错误: ld.exe | |找不到-lCURL|u STATICLIB | | |=生成完成:1个错误,0个警告===| 编译此代码时:C++ 向Code::Blocks IDE添加静态libcurl,c++,static,libcurl,codeblocks,C++,Static,Libcurl,Codeblocks,我不知道如何正确地将静态libcurl库添加到我的Code::Blocks IDE中。我希望它是静态的,因为在我的程序运行时不需要.dll文件,默认情况下Windows不包含这些文件。我正在使用这个libcurl: (不带OpenSSL的minGW) 以下是我的全局编译器设置: 我得到以下错误: ld.exe | |找不到-lCURL|u STATICLIB | | |=生成完成:1个错误,0个警告===| 编译此代码时: include <stdio.h> include <
include <stdio.h>
include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://google.com");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
包括
包括
内部主(空)
{
卷曲*卷曲;
卷曲编码;
curl=curl_easy_init();
if(curl){
curl\u easy\u setopt(curl,CURLOPT\u URL,“http://google.com");
res=旋度(curl)\u容易执行(curl);
/*总是清理*/
旋度\轻松\清洁(旋度);
}
返回0;
}
显然它没有找到CURL_STATICLIB,所以我不知道为什么。我甚至不确定是否需要将CURL_STATICLIB添加到我的链接器设置中(我在其他论坛上读过)。我发现有些人也有同样的问题,但在任何地方都没有得到正确的回答:
stackoverflow.com/questions/4176503/failured-with-libcurl
forums.codeblocks.org/index.php?topic=11391.0
old.nabble.com/gcc-working-with-libcurl-td20506927.html
forums.devshed.com/c-programming-42/linker-error-using-libcurl-698071.html
我已经厌倦了和这个战斗,请帮帮我
编辑:
你好,维克多,谢谢你的回复
我会尽量详细,这样就不会有误解。
下面是我的C:\libs\folder的目录/文件夹树的图像:
如您所见,它还包括构建日志,您将注意到这次的错误是
与我之前发布的不同。这是因为我更改了全局编译器和构建项目设置
我的新生成项目设置:
我的新全局编译器设置:
我确信我配置的这些设置是错误的,这就是我无法编译它的原因。好的,我使用静态链接成功地用libcurl构建了您的示例。完成这项工作所涉及的细节相当复杂——对于粗心的人来说,正确设置它可能会变得棘手 以下是我用来完成这项工作的步骤,请务必仔细遵循这些步骤:
CURL\u STATICLIB
。定义此项后,libcurl.h标头将对其函数签名进行预处理,以适应静态链接。否则,将假定动态链接,损坏的名称将变为\u imp\u*
。屏幕截图中未解决的错误表明它正在尝试动态链接,而不是所需的静态链接。- 在“其他链接器选项”下,不需要屏幕截图中的其他额外开关libcurl.a'已被链接库列出并涵盖
- “libcrypto.a”似乎包含与“libeay32.a”相同的引用,因此只需要其中一个引用。然而,“libeay32.a”虽然尺寸较大,但仍会导致动态链接。如果您希望应用程序“完全独立”,请使用“libcrypto.a”,而不是像屏幕截图中那样
- 如果您希望将来动态链接,只需将链接库下的列表替换为“curldll”,并删除
define。由于libcurl.dll已经包含了额外的库(例如ssl、idn、rtmp等),因此不需要这些库CURL\u STATICLIB
- 通过使用代码块的用户模板,可以避免新libcurl程序的繁琐的错误设置。(例如:文件->新建->项目->用户模板)
希望这能一劳永逸地解决您在libcurl中遇到的任何构建问题。为了获得更多信息,您还可以提供实际调用的命令行是什么样子的吗?您可以通过在“其他设置”选项卡下并从下拉列表中选择“完整命令行”来完成此操作。您还可以提供lib/curl-7.x.x*/lib目录下存在的文件列表吗?您是如何“安装”libcurl文件的?您是否刚刚创建了一个新目录并复制了lib和文件夹,然后告诉codeblocks查看那里?我正试图自己解决这个问题。谢谢!:)感谢您的详细描述和提示!现在静态和动态地构建它对我来说很有效!最后一个问题是:您如何知道必须添加什么以及在哪里添加?你的信息来源是什么?我也希望了解这一点,这样我就不必在每次向IDE添加新库时都进行垃圾邮件堆栈溢出。再次感谢你!:)@新手:你问题中的链接提供了一个很好的起点,但很多都来自于使用工具的经验和反复试验。Mingw附带了“nm”和“objdump”,它们非常有用——它们允许您准确地检查所讨论的库文件中的内容(其他编译器有自己的“objdump”版本)。将其与“grep”(windows下的“findstr”也可以使用)结合使用,您可以定位特定函数或数据块的驻留位置(或者它是否存在)