c - 将 JSON 库与我的 AVR 微 Controller 代码集成时遇到困难

标签 c codeblocks avr avr-gcc atmelstudio

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

基本上,我需要一种在大学项目的 AVR 微 Controller 中解析 JSON 数据的方法。为此,我尝试下载 jansson ( https://github.com/akheron/jansson ) 并将其集成到我现有的微 Controller 代码构建中。我正在 Windows 10 中使用 Atmel Studio,但我还使用 MinGW GCC 安装了 Code::Blocks(在同一 Windows 10 安装上),以便构建库,并尝试将该库集成到 native 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'的 undefined reference ”(这是我无缘无故调用的API中的一个函数)除了查看项目是否已正确构建)和/或“ld 返回 1 退出状态”。

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

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

最佳答案

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

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

在代码:: block 中: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)复制到应用程序的项目目录中,则使用库文件的相对路径会很方便。

关于c - 将 JSON 库与我的 AVR 微 Controller 代码集成时遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52463030/

相关文章:

更改我传递给函数而不用 C 中的 Return 的数组

c - 错误 : identifier "_S_IFDIR" is undefined

c++ - 代码块和 OpenGL

c++ - 尝试用纯c语言对arduino进行编程,在 '='之前出现以下错误: expected ',' , ';'、 'asm'、 '__attribute__'或 'Print' |

c - 修改控制台 C Codeblocks 中先前编写的行

assembly - 使用 AVR 反转字节中的位

c - AVR/C代码含义

计算正确的工作组数量及其大小 OpenCL

c - 在c中按索引偶数或奇数将数组拆分为两个数组

c - 将循环中的值分配给字符指针数组