【问题标题】:C++: Libcurl curl_easy_init() gives an access violation error and crashes the programC++:Libcurl curl_easy_init() 给出访问冲突错误并使程序崩溃
【发布时间】:2011-04-29 20:45:05
【问题描述】:

我正在尝试将 libcurl 与我正在制作的程序一起使用,但我遇到了一些问题。到目前为止,我只尝试了 libcurl 网站上的示例,但是一旦程序进入 curl 初始化,它们就会崩溃。

我当前的代码:

#include <iostream>
#include <curl/curl.h>

int main(int argc, char *argv[])
{
    CURL *curl;
    CURLcode res;

    curl = curl_easy_init();
    if(curl)
    {
        curl_easy_setopt(curl, CURLOPT_URL, "http://garrysmod.fi/");
        res = curl_easy_perform(curl);

        curl_easy_cleanup(curl);
    }

    return 0;
}

我还确保编译器和链接器可以找到资源,并且 dll 文件 (libcurl.dll) 在程序的文件夹中,但它一直在崩溃。 我尝试使用 VS2010 进行调试,它在初始化函数 curl_easy_init() 处给了我一个“访问冲突”错误。

任何帮助将不胜感激!

【问题讨论】:

    标签: c++ curl crash libcurl access-violation


    【解决方案1】:

    这几乎可以肯定是 DLL 的不匹配。首先检查您的 PATH 是否有任何旧版本或不同版本的 libcurl.dll。

    我刚刚使用 VS2010 专业版针对 MSVC 7.18.0 / Win32 generic 的此版本构建了您的 sn-p,它运行良好。

    【讨论】:

    • 谢谢!我使用的是 Win32 Generic 版本的 libcurl 而不是 Win32 MSVC。该程序稍后还给出了有关 zlib 的错误消息,但已通过下载并将 zlib1.dll 放入程序文件夹中来修复。
    • 好消息;这就是我的样子。为了将来的参考,如果可以找到由 DLL 地狱引起的问题,我通常会针对静态 lib 版本进行构建。我经常使用静态库精确地发布代码以避免 DLL 问题。 exe的额外大小值得提高可靠性。
    【解决方案2】:

    程序在我的机器上编译正常(ubuntu 盒子):

    #g++ -lcurl url.c -o url

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>Garry's Mod Finland - Etusivu</title>
        <meta h ....
    

    【讨论】:

      【解决方案3】:

      您可以尝试在发行版编译中运行该程序,看看它是否可以正常工作。我注意到,对于我在 Windows 上使用的一些开源库,如果将调试版本与 OS 库的发布版本链接起来,事情就不能很好地工作。然后,我通常会设置编译器选项以链接到调试版本中的库的调试版本和发布版本中的库的发布版本。

      不幸的是,我从来没有费心去追查为什么会发生这种情况。值得一试。

      【讨论】:

      • 好点,这对我也有用。不过,在这种情况下似乎不是。无论如何,谢谢您的回答。
      猜你喜欢
      • 2016-07-12
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多