Возникли проблемы при интеграции библиотеки JSON с кодом микроконтроллера AVR - PullRequest
0 голосов
/ 23 сентября 2018

Я относительно неопытный разработчик C и не имел опыта интеграции библиотек, созданных другими разработчиками, в существующие проекты.

По сути, мне нужны средства анализа данных JSON в микроконтроллере AVR для университетского проекта.С этой целью я попытался загрузить и интегрировать jansson (https://github.com/akheron/jansson) в мою существующую сборку кода микроконтроллера. Я работаю с Atmel Studio в Windows 10, но я также установил Code :: Blocks с MinGW GCC (ната же установка Windows 10) с целью создания библиотеки и попытки интеграции библиотеки в собственное приложение Windows. Пока что ни одна из них не увенчалась успехом, и я получаю те же ошибки.до сих пор было признано, что они были полезны, или выходят далеко за рамки моего понимания.

Это то, что я сделал до сих пор:

Я начал с попытки собрать программное обеспечение, а затем интегрировать его.в существующий проект в соответствии с инструкциями в https://jansson.readthedocs.io/en/2.11/gettingstarted.html. Я установил CMake, собрал файлы проекта для Code :: Blocks с помощью cmake.exe -G «CodeBlocks - MinGW Makefiles», затем открыл проект и собрал все. Несколькоиз целей (я думаю, что связанных с тестированием) не удалось построить, но сам Янссон построил и оutput libjansson.a в каталог \ lib \, так что я не слишком много думал об этом.

Это насколько я смог получить.И в Atmel Studio, и в Code :: Blocks я делаю одно и то же: добавляю jansson.h к соответствующим путям включения, добавляю #include «jansson.h» ко всем соответствующим файлам и добавляю libjansson.a как библиотеку всоответствующие параметры компоновщика в каждой среде IDE.Я пробовал разные вещи, такие как добавление и удаление флагов для компоновщика, но вывод всегда «не могу найти -ljansson», «неопределенная ссылка на« json_object_seed »» (это функция в API, которую я вызываю без причины.кроме того, чтобы увидеть, правильно ли построен проект) и / или «ld вернул 1 состояние выхода».

Я не могу не чувствовать, что проблема со строкой «cc -o prog prog.c -ljansson »в документации, указанной выше.Я действительно просто не понимаю, как правильно настроить компоновщик для сборки проекта.

Если бы кто-нибудь мог дать некоторое представление о том, что я делаю неправильно / правильный способ связать эту библиотеку, я быочень ценю.

1 Ответ

0 голосов
/ 23 сентября 2018

Сама библиотека должна быть построена с соответствующим набором инструментов.Я предполагаю, что вы собрали свою библиотеку дважды: одна версия с использованием набора инструментов MinGW, а другая - с набором инструментов avr-gcc.

Если вы компилируете целевое приложение, а компоновщик не может найти библиотеку, попробуйте добавить путь к каталогу, содержащему *.файл библиотеки для настроек компоновщика (путь поиска компоновщика).Допустим, у вас есть: /path/to/lib/libjansson.a

In Code :: Blocks: Project → Build options → Search directories → Linker add /path/to/lib/.Затем он должен связать с включенным набором путей, например: cc -o prog prog.c -ljansson -L/path/to/lib/

В Atmel Studio при добавлении библиотеки в Solution Explorer → Libraries → Add Library он должен автоматически добавить путь поиска библиотеки к параметрам компоновщика.Если вы отметите Project → Properties → AVR/GNU Linker, то должно быть (между другими параметрами): -Wl,-ljansson -Wl,-L"/path/to/lib/"

Если вы скопировали библиотечные файлы (libjansson.a и jansson.h) в каталог проекта вашего приложения, будет удобно использоватьотносительные пути к файлам библиотеки.

...