gpt4 book ai didi

c++ - 将静态 libcurl 添加到 Code::Blocks IDE

转载 作者:可可西里 更新时间:2023-11-01 15:39:51 25 4
gpt4 key购买 nike

我不知道如何将静态 libcurl 库正确添加到我的 Code::Blocks IDE。我希望它是静态的,因为在我的程序运行期间不需要默认情况下不包含在 Windows 中的 .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 find -lCURL_STATICLIB| ||=== Build finished: 1 errors, 0 warnings ===|

编译这段代码时:

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?topic=11391.0

old.nabble.com/gcc-working-with-libcurl-td20506927.html

forums.devshed.com/c-programming-42/linker-error-using-libcurl-698071.html

我已经厌倦了与此抗争,请帮助我。

编辑:

你好 Victor,谢谢你的回复!

我会尽量写得详细一点,以免造成误会。因此,这是我的 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

我确信我配置了错误的这些设置,这就是我无法编译它的原因。

最佳答案

好的,我成功地使用 libcurl 使用静态链接构建了您的示例。完成这项工作所涉及的细节非常复杂——正确设置它对于粗心的人来说可能会很棘手。

以下是我用来完成这项工作的步骤,请务必仔细遵循:

  1. 转到项目构建选项->编译器设置->#defines:输入CURL_STATICLIB。定义后,libcurl.h header 将对其函数签名进行预处理以适应静态链接。否则,假定为动态链接,然后损坏的名称变为 _imp__*。屏幕截图中 Unresolved 错误表明它正在尝试动态链接而不是所需的静态链接。

  2. Project build options->Linker settings->Link libraries 下,确保它包含以下内容:curl、rtmp、idn、ssl、ssh2、crypto、z、ws2_32 , wldap32, winmm, gdi32。请注意,顺序很重要。由于 gnu 链接器的设计缺陷,需要首先列出最依赖的库,然后是最不依赖的库。 msvc link 和 borland 的 ilinker 等其他链接器不会出现此类问题——这些库可以按任何顺序列出。

  3. Project build options->Linker settings->Other linker options 下添加“-static”。这将确保使用“idn”的静态版本。如果省略此开关,则您编译的程序可能依赖于“libidn-11.dll”来运行,这可能不是您想要的。

此时,您应该能够毫无问题地编译和链接 libcurl 程序。有几件事值得一提,

  • Other linker options 下,不需要您屏幕截图中的其他额外开关。 “libcurl.a”已被列出并包含在链接库中。

  • “libcrypto.a”似乎包含与“libeay32.a”相同的引用,因此只需要其中一个。但是,'libeay32.a' 尽管它的大小较大,但会导致动态链接。如果您希望您的应用程序“完全独立”,请使用“libcrypto.a”,而不是像屏幕截图中那样。

  • 如果您以后希望动态链接,只需将链接库 下的列表替换为“curldll”并删除CURL_STATICLIB 定义。不需要额外的库(例如 ssl、idn、rtmp 等),因为 libcurl.dll 已经涵盖了它们。

  • 通过使用代码块的用户模板,您可以避免新 libcurl 程序的繁琐易错设置。 (例如,文件->新建->项目->用户模板)

希望这能一劳永逸地解决您在使用 libcurl 时遇到的任何构建问题。

关于c++ - 将静态 libcurl 添加到 Code::Blocks IDE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com