无法将JSON库与我的AVR微控制器代码集成

时间:2018-09-23 04:38:30

标签: c codeblocks avr avr-gcc atmelstudio

我是一个相对缺乏经验的C开发人员,以前没有将其他开发人员创建的库集成到现有项目中的经验。

基本上,我需要一种用于大学项目的AVR微控制器中的JSON数据解析方法。为此,我尝试将jansson(https://github.com/akheron/jansson)下载并集成到我现有的微控制器代码中。我正在使用Windows 10中的Atmel Studio,但我还使用MinGW GCC安装了Code :: Blocks(在相同的Windows 10安装中),目的是构建库并尝试将库集成到本机Windows应用程序中。到目前为止,都没有成功,而我也遇到了同样的错误。到目前为止,我发现的所有在线资源都对基础知识很有用,甚至超出了我的理解范围。

这是我到目前为止所做的:

我首先尝试构建软件,然后按照https://jansson.readthedocs.io/en/2.11/gettingstarted.html中的说明将其集成到现有项目中。我安装了CMake,使用cmake.exe -G“ CodeBlocks-MinGW Makefiles”构建了Code :: Blocks的项目文件,然后打开了项目并构建了所有内容。一些目标(我认为与测试有关)未能建立,但是jansson本身建立了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 :(得分:0)

库本身应使用适当的工具链构建。我假设您两次构建了库,一个版本使用MinGW工具链,另一个版本使用avr-gcc工具链。

如果编译目标应用程序且链接器找不到库,请尝试将包含* .a库文件的目录路径添加到链接器设置(链接器搜索路径)。假设您有:/path/to/lib/libjansson.a

在代码::块中:Project → Build options → Search directories → Linker添加/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)复制到应用程序的项目目录,则使用库文件的相对路径将很方便。