画像を処理するプロジェクトに取り組んでおり、画像の内容をチェックして、形式が有効であることを確認する必要があります (例: png、jpg など)。したがって、マジック ナンバーまたはファイル署名を使用できることはわかっています。libmagic-dev を使用しようとしましたが、機能しませんでした (Mac を使用しています)。ソース コードを使用しようとしましたが (プロジェクトで lib と参照を作成しました)、うまくいきませんでした。そして、私はCでこれをやりたい.誰かが私にこれを得る方法を言うことができますか?
int check_ext(char* filename) {
magic_t handle = magic_open(MAGIC_NONE|MAGIC_COMPRESS);
magic_load(handle, NULL);
fgets(filename, sizeof(filename), stdin);
size_t ln = strlen(filename) - 1;
if (filename[ln] == '\n') {
filename[ln] = '\0';
}
const char * type = magic_file(handle, filename);
if (type) {
if(strlen(type) > 3)
return 0;
else if(strcasecmp(type, "png") == 0)
return 1;
else if(strcasecmp(type, "bmp") == 0)
return 1;
else if(strcasecmp(type, "ppm") == 0)
return 1;
else if(strcasecmp(type, "pgm") == 0)
return 1;
else
return 0;
} else {
return 0;
}
magic_close(handle);
return 0;
}
エラー:
Undefined symbols for architecture x86_64:
"_magic_file", referenced from:
_check_ext in arguments.c.o
"_magic_load", referenced from:
_check_ext in arguments.c.o
"_magic_open", referenced from:
_check_ext in arguments.c.o