我是一个相对缺乏经验的 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/