C语言 在将 JSON 库与我的 AVR 微控制器代码集成时遇到困难



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

基本上,我需要一种在大学项目的AVR微控制器中解析JSON数据的方法。为此,我尝试下载 jansson (https://github.com/akheron/jansson( 并将其集成到我现有的微控制器代码版本中。我在 Windows 10 中使用 Atmel Studio,但我也安装了 Code::Blocks with MinGW GCC(在同一 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::Block 中,我都做了同样的事情:将 jansson.h 添加到相关的包含路径中,将 #include"jansson.h"添加到所有相关文件中,并将 libjansson.a 作为库添加到每个 IDE 各自的链接器选项中。我已经尝试了各种方法,例如向链接器添加和删除标志,但输出始终是"找不到 -ljansson"、"对'json_object_seed'的未定义引用"(这是我调用的 API 中的一个函数,除了查看项目是否正确构建(和/或"ld 返回 1 个退出状态"。

我不禁觉得问题出在上面链接的文档中的"cc -o prog prog.c -ljansson"行上。我真的只是不明白如何正确设置链接器来构建项目。

如果有人能深入了解我做错了什么/链接此库的正确方法,我将不胜感激。

库本身应该使用适当的工具链构建。我假设你构建了两次库,一个版本使用 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(复制到应用程序的项目目录中,则使用库文件的相对路径会很方便。

最新更新