私は c++ を使用して Linux で非常に単純なプログラムを作成しました。このプログラムは、cURL ライブラリを使用して、http 経由で Web サイトから画像をダウンロードします (基本的には 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 に関するものでしょうか? しかし、プログラムはデバッガーなしで正常に実行されます! 助けていただければ幸いです。