Использование cJSON в окнах

Я хочу использовать библиотеку cJSON в Windows с помощью clion. Я скопировал cJSON.h и cJSON.c в каталог моего проекта. Я включил cJSON.h с помощью этой команды: #include "cJSON.h" Когда я пытаюсь скомпилировать свой проект, я получаю следующие ошибки:

CMakeFiles\Client.dir/objects.a(main.c.obj): In function `parse':
.../main.c:117: undefined reference to `cJSON_Parse@4'
.../main.c:121: undefined reference to `cJSON_GetErrorPtr@0'
.../main.c:127: undefined reference to `cJSON_GetObjectItemCaseSensitive@8'
.../main.c:128: undefined reference to `cJSON_GetObjectItemCaseSensitive@8'
.../main.c:131: undefined reference to `cJSON_IsString@4'
.../main.c:131: undefined reference to `cJSON_IsString@4'
.../main.c:141: undefined reference to `cJSON_Delete@4'
collect2.exe: error: ld returned 1 exit status
CMakeFiles\Client.dir\build.make:84: recipe for target 'Client.exe' failed
mingw32-make.exe[3]: *** [Client.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/Client.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles/Client.dir/rule] Error 2
CMakeFiles\Makefile2:71: recipe for target 'CMakeFiles/Client.dir/all' failed
CMakeFiles\Makefile2:83: recipe for target 'CMakeFiles/Client.dir/rule' failed
Makefile:117: recipe for target 'Client' failed
mingw32-make.exe: *** [Client] Error 2

person Pouya Esmaili    schedule 19.12.2019    source источник


Ответы (3)


Похоже, вы не добавили файл cjson.c в свою сборку, и это вызывает ошибки ссылок, которые вы получаете, или вы можете добавить файлы c (cjson.c) в проект c++, и вам не хватает префикса «extern C» в заголовке cjson.h.

person Eliyahu Machluf    schedule 19.12.2019

Проверьте свой файл CMakeLists.txt, в разделе set(SOURCE_FILES) вы должны добавить файлы cJson, если их еще нет, вместе с вашими собственными. Что-то типа:

set(SOURCE_FILES src/main.cpp include/main.h src/cJson.c include/cJson.h)

Если это не сработает или если они уже присутствуют, вы можете попробовать написать extern C {...} со всем содержимым cJson.h в скобках, если вы пытаетесь использовать библиотеку C с C++.

person John Doe    schedule 19.12.2019
comment
Поскольку я использую c и все файлы находятся в одном каталоге, я изменил вашу команду set и получаю те же ошибки: set(SOURCE_FILES main.c cJSON.c cJSON.h) - person Pouya Esmaili; 19.12.2019

Я только что решил проблему. Единственное, что мне нужно было сделать, это добавить cJSON.h и cJSON.c в функцию add_executable CMakeLists.txt следующим образом:

add_executable(ProjectName main.c cJSON.h cJSON.c)
person Pouya Esmaili    schedule 27.12.2019