我在Linux中使用C++编写了一个非常简单的程序,该程序使用cURL库从http下载某个网站的图像(基本上开发了一个http客户机请求)。 http://curl.haxx.se/libcurl/c/allfuncs.htmlgdb/ddd程序接收到的信号SIGILL
#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)
然后我尝试在另一个简单的程序上使用ddd,它不涉及cURL库,它运行良好!
有谁知道为什么会出现这种情况,解决方案是什么?当ddd运行时,我是否需要指向cURL库?但是,在过去,我不记得使用不同的库来做这件事!也许这是ddd不喜欢的cURL的东西吗?但是程序运行良好,没有调试器!我希望得到一些帮助。
只是说:我来到这里时发生了同样的错误。我的解决方案是恢复到'gdb 7.6.1'(来自gdb7.7)。 – Sebastian 2014-02-12 11:27:51
谢谢你塞巴斯蒂安! – Mike 2015-06-09 11:17:15
[SSL \ _library \ _init在gdb下运行时导致SIGILL可能重复](https://stackoverflow.com/questions/25708907/ssl-library-init-cause-sigill-when-running-under-gdb) – jww 2017-08-12 17:45:37