【发布时间】:2013-02-25 16:29:07
【问题描述】:
我使用 c++ 在 Linux 中编写了一个非常简单的程序,它使用 cURL 库通过 http(基本上开发了一个 http 客户端请求)从某个网站下载图像。 http://curl.haxx.se/libcurl/c/allfuncs.html
#define CURL_STATICLIB
#include <stdio.h>
#include <stdlib.h>
#include </usr/include/curl/curl.h>
#include </usr/include/curl/stdcheaders.h>
#include </usr/include/curl/easy.h>
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written = fwrite(ptr, size, nmemb, stream);
return written;
}
int main(void) {
CURL *curl;
FILE *fp;
CURLcode res;
char *url = "http://www.example.com/test_img.png";
char outfilename[FILENAME_MAX] = "/home/c++_proj/output/web_req_img.png";
curl = curl_easy_init();
if (curl) {
fp = fopen(outfilename,"wb");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
fclose(fp);
}
return 0;
}
我验证了代码,它工作正常。我可以看到图像已下载并且我可以查看图像(没有错误或警告)。由于我打算扩展我的代码,我尝试安装 ddd,并使用调试器,但是当我尝试使用 ddd 运行我的程序时,调试器不起作用,并且我的程序以某种信号错误退出。
这是错误:
(Threadd debugging using libthread_db enabled)
Using host libthread_db library "/lib/arm-linux-gnueadihf/libthread_db.so.1"
Program received signal SIGILL, illegal instruction.
0xb6a5c4C0 in ?? () from /usr/lib/arm-linux-gnueadbihf/libcrypto.so.1.0.0
首先我认为我没有正确安装 ddd,所以我回到了 gdb,但是当我运行程序时,我得到了完全相同的错误。 (而且我相信我用的是最新版的gdb和ddd)
然后我尝试在另一个不涉及 cURL 库的简单程序上使用 ddd,并且效果很好!!!
有谁知道为什么会这样,解决办法是什么?在 ddd 运行时,我是否需要以某种方式指向 cURL 库?但是,在过去,我不记得用不同的库做这个!也许这是 ddd 不喜欢的 cURL ?但是程序在没有调试器的情况下运行良好!我将不胜感激。
【问题讨论】:
-
只是说:我带着同样的错误来到这里。我的解决方案是恢复到
gdb 7.6.1(来自 gdb7.7)。
标签: linux gdb libcurl raspberry-pi ddd-debugger