【问题标题】:Using libcurl on 32bit Windows在 32 位 Windows 上使用 libcurl
【发布时间】:2018-02-14 19:36:22
【问题描述】:

我正在尝试在 32 位 Windows 安装上使用 libcurl 进行编译。我正在使用 mingw 作为编译器。我从https://bintray.com/artifact/download/vszakats/generic/curl-7.58.0-win32-mingw.7z 下载了 libcurl,并使用它来编译我的项目:

g++ -o test.exe -g just_get_output.cpp http_requests.cpp -L C:\curl-7.58.0-win32-mingw\lib -lcurl -lpsapi

所有的 libcurl 代码都在 http_requests.cpp 中:

#include <stdio.h>
#define CURL_STATICLIB
#include <curl/curl.h>

// https://kukuruku.co/post/a-cheat-sheet-for-http-libraries-in-c/

int http_post(char* url, char* data)
{
    CURL *curl;
    CURLcode res;

    curl_global_init(CURL_GLOBAL_ALL);

    curl = curl_easy_init();
    if(curl) 
    {
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
        res = curl_easy_perform(curl);
        if(res != CURLE_OK)
        {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        }
        curl_easy_cleanup(curl);
    }
    curl_global_cleanup();
    return 0;
}

我的主要代码,经过大量编辑:

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <windows.h>
#include <tchar.h>
#include <psapi.h>
#include "http_requests.cpp"

int main( void ) {
    std::string info = "test";
    std::string url = "192.168.30.1:8080";
    http_post(url, info)
    return 0;
}

我得到的错误:

Z:\>g++ -o test.exe -g just_get_output.cpp http_requests.cpp -L C:\curl-7.58.0-win32-mingw\lib\libcurl.a -lcurl -lpsapi
In file included from just_get_output.cpp:11:0:
http_requests.cpp:3:23: fatal error: curl/curl.h: No such file or directory
 #include <curl/curl.h>
                       ^
compilation terminated.
http_requests.cpp:3:23: fatal error: curl/curl.h: No such file or directory
 #include <curl/curl.h>
                       ^
compilation terminated.

发生了什么事?我预编译的 libcurl.a 位于正确的目录中,我正在使用 -L 和 -l 正确链接它,但我不确定我缺少什么。

【问题讨论】:

  • 这是一个编译而不是链接错误,它期望curl/curl.h上面的目录在包含路径上。
  • 啊,好吧,这是我第一次用第三方库编译 C++。我该如何解决?
  • 实际上我确实设法用谷歌搜索了这个——对于其他人来说,你可以使用 -I(大写 I)链接到 C:\curl-7.58.0-win32-mingw\include 谢谢@RichardCritten!
  • 你现在应该回答你自己的问题

标签: c++ compilation libcurl


【解决方案1】:

这是一个编译错误。期望 curl/curl.h 上方的目录位于包含路径上。

对于其他人,您可以使用 -I(大写 I)链接到 C:\curl-7.58.0-win32-mingw\include。谢谢@RichardCritten!

【讨论】:

    【解决方案2】:

    一如既往,您应该阅读the documentation

    编译程序

    您的编译器需要知道 libcurl 标头的位置。因此,您必须将编译器的包含路径设置为指向您安装它们的目录。 'curl-config'[3] 工具可用于获取此信息:

    $ curl-config --cflags

    我没有使用过 libcurl,但是根据这个页面,我认为您应该执行的是这样的:

    g++ -o test.exe -g \
       just_get_output.cpp http_requests.cpp \
       `curl-config --cflags` \
       `curl-config --libs`
    

    现在将为您正确放置所需的参数。

    【讨论】:

    • 啊,好吧。我确实读过这个,但我的印象是 curl-config 是一个我必须运行的命令行工具,我不知道如何在 Windows 上运行它。我没有在windows机器上安装curl,我只有从上面链接下载的zip文件中包含的项目。
    • @E.Browning:它一个你必须运行的命令行工具,就像g++一样。您应该正确执行安装。如果真的很绝望,您可以坚持使用硬编码标志,但其中必须是包含路径。
    • 怎么样?网站上没有关于如何安装 curl-config 的说明——我的印象是我只需要使用 zip 文件中的项目并告诉编译器和链接器它们都在哪里。我错了吗?
    • 你没有告诉编译器它在哪里。您没有提供包含路径。
    • 您链接的特定页面不包含 libcurl 的安装说明。它包含 libcurl 的使用说明,假设它已经在系统上。他们的下载页面也没有,当我下载了为我的系统预编译的正确 zip 文件时,据我所见,它没有附带 curl-config。如果您熟悉在 win32 上使用 libcurl,能否提供更多指导?如果这种方式不正确,我很乐意正确安装它。
    猜你喜欢
    • 2016-12-02
    • 2011-05-13
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2013-10-17
    • 2011-09-02
    • 2013-04-05
    相关资源
    最近更新 更多