最近、David Gamble によって cJSON ライブラリをインストールしましたCmake
が、次のエラーが表示されます。
gcc prueba.c -lm -o prueba /tmp/ccdmegU5.o: 関数「main」内: prueba.c:(.text+0x2e): `cJSON_Parse' への未定義の参照 prueba.c:(.text+0x45): `cJSON_GetObjectItem' への未定義の参照 prueba.c:(.text+0x60): `cJSON_GetObjectItem' への未定義の参照 prueba.c:(.text+0xa2): `cJSON_GetObjectItem' への未定義の参照 prueba.c:(.text+0xb2): `cJSON_GetArraySize' への未定義の参照 prueba.c:(.text+0xdb): `cJSON_GetArrayItem' への未定義の参照 prueba.c:(.text+0xf2): `cJSON_GetObjectItem' への未定義の参照 prueba.c:(.text+0x10d): `cJSON_GetObjectItem' への未定義の参照 prueba.c:(.text+0x146): `cJSON_Delete' への未定義の参照 collect2: エラー: ld が 1 つの終了ステータスを返しました
次のような単純な .c コードをコンパイルしようとすると、次のようになります。
int main(int argc, const char * argv[]) {
/*{
"name": "Mars",
"mass": 639e21,
"moons": [
{
"name": "Phobos",
"size": 70
},
{
"name": "Deimos",
"size": 39
}
]
}*/
char *strJson = "{\"name\" : \"Mars\",\"mass\":639e21,\"moons\":[{\"name\":\"Phobos\",\"size\":70},{\"name\":\"Deimos\",\"size\":39}]}";
printf("Planet:\n");
// First, parse the whole thing
cJSON *root = cJSON_Parse(strJson);
// Let's get some values
char *name = cJSON_GetObjectItem(root, "name")->valuestring;
double mass = cJSON_GetObjectItem(root, "mass")->valuedouble;
printf("%s, %.2e kgs\n", name, mass); // Note the format! %.2e will print a number with scientific notation and 2 decimals
// Now let's iterate through the moons array
cJSON *moons = cJSON_GetObjectItem(root, "moons");
// Get the count
int moons_count = cJSON_GetArraySize(moons);
int i;
for (i = 0; i < moons_count; i++) {
printf("Moon:\n");
// Get the JSON element and then get the values as before
cJSON *moon = cJSON_GetArrayItem(moons, i);
char *name = cJSON_GetObjectItem(moon, "name")->valuestring;
int size = cJSON_GetObjectItem(moon, "size")->valueint;
printf("%s, %d kms\n", name, size);
}
// Finally remember to free the memory!
cJSON_Delete(root);
return 0;
}
cJSON.c の内容をコードに追加すると、問題は解決しますが、破損したファイルが出力されます。