首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向代码添加静态libcurl::块IDE

向代码添加静态libcurl::块IDE
EN

Stack Overflow用户
提问于 2011-06-05 14:52:17
回答 1查看 15.1K关注 0票数 10

我不知道如何正确地将静态libcurl库添加到我的代码::块IDE中。我希望它是静态的,因为在我的程序运行时,不需要默认情况下不包含在.dll中的任何文件。我正在使用这个libcurl:http://curl.haxx.se/dlwiz/?type=lib&os=Win32&flav=- (没有OpenSSL的minGW)

以下是我的全局编译器设置:http://img845.imageshack.us/img845/1381/halpr.jpg

我得到了以下错误:

ld.exe||cannot查找-lCURL_STATICLIB| ||===构建完成:1错误,0警告===|

在编译此代码时:

代码语言:javascript
复制
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_STATICLIB,清华我不知道为什么。我甚至不确定是否需要将CURL_STATICLIB添加到我的链接器设置中(我在其他论坛上读过)。我发现有些人也有同样的问题,但在任何地方都没有得到正确的回答:

stackoverflow.com/questions/4176503/frustrated-with-libcurl

Forums.codeblocks.org/index.php?主题=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\文件夹的目录/文件夹树的图像:

http://img199.imageshack.us/img199/6977/curl1.png

正如您所看到的,它还包括构建日志,您将注意到这次错误与我之前发布的错误不同。这是因为我更改了全局编译器并构建了项目设置。

我的新构建项目设置:http://img863.imageshack.us/img863/4404/buildoptions.png我的新的全球编译器设置:http://img225.imageshack.us/img225/4926/curl2.png

我确信我配置这些设置错误,这就是为什么我不能编译它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-08 23:33:25

好的,我成功地用libcurl使用静态链接成功地构建了您的示例。使这项工作所涉及的细节是相当复杂的-正确设置它可能变得棘手,对粗心的人。

下面是我用来做这件事的步骤,一定要小心地遵循它们:

  1. 转到Project >Compiler设置->#
  2. :键入CURL_STATICLIB。当定义这一点时,libcurl.h头将进行函数签名预处理以适应静态链接。否则,假设动态链接,然后将被损坏的名称变为_imp__*。屏幕截图中未解决的错误表明它尝试的是动态链接,而不是所需的静态链接。

项目构建选项下的

  1. ->Linker设置->链接库确保它包含以下内容:curl、rtmp、idn、ssl、ssh2、crypto、z、ws2_32、wldap32、winmm、gdi32。注意顺序很重要。由于gnu的设计缺陷,需要首先列出最依赖的库,其次是最不依赖的库。其他链接器,如msvc链接和borland的ilinker不显示这样的问题--库可以按任何顺序列出。项目构建选项下的
  2. -> linker设置->其他链接器选项添加‘-静态’。这将确保使用静态版本的“idn”。如果省略了这个开关,那么编译的程序可能依赖于‘libin-11.dll’来运行,这可能不是您想要的。

此时,您应该能够编译和链接libcurl程序,而不会出现任何问题。有几件事值得一提,

  • 下的其他链接器选项,其他额外的开关从您的屏幕快照是不需要的。'libcurl.a‘已经被列出,并由Link libraries.
  • The 'libcrypto.a’覆盖。a似乎覆盖了与'libeay32.a‘相同的引用,因此只需要其中一个引用。然而,“libeay32.a”会导致动态链接,尽管它的大小更大。如果您希望您的应用程序‘完全独立’使用‘libcryp.a’而不是像在screenshot.
  • If中那样,您希望在将来动态链接,只需将清单替换为链接库下的“curldll”,并删除CURL_STATICLIB定义。额外的图书馆( ssl、idn、rtmp等)不需要,因为libcurl.dll已经涵盖了它们。
  • 您可以通过使用代码块的用户模板来避免繁琐的容易出错的新libcurl程序的设置。(例如,->新建->项目->用户模板)

希望这能彻底解决你对libcurl的任何构建问题。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6243638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档