Ошибка cJSON при компиляции и печати файла

Я недавно установил библиотеку cJSON от David Gamble через 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: error: 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 в мой код, это решит проблему, но напечатает поврежденный файл.

1 ответ

Вы должны скомпилировать это с -lcjson для того, чтобы связать ваш код с установленной библиотекой cJSON.

Другие вопросы по тегам