【问题标题】:Having Difficulty Integrating JSON Library with My AVR Microcontroller Code难以将 JSON 库与我的 AVR 微控制器代码集成
【发布时间】:2018-09-23 04:38:29
【问题描述】:

我是一个相对缺乏经验的 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 构建项目文件,然后打开项目并构建所有内容。一些target(我相信和测试有关)构建失败,但是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”行。我真的不明白如何正确设置链接器以构建项目。

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

【问题讨论】:

    标签: c codeblocks avr avr-gcc atmelstudio


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      相关资源
      最近更新 更多