1. 背景:
现在想将嵌入式开发板部署成边缘控制器,需要在开发板上部署一个服务。我们已经写了一个c语言的应用,现在需要将其编译成适配64位arm架构的2进制可执行文件
2. bug:
在编译的时,输入命令:
g++ -fdiagnostics-color=always -g unifiedAccessServer.cpp baseModels/control/ec/ecBaseModel.cpp baseModels/control/ec/ecBaseModel.h baseModels/defineDeviceFolder.h baseModels/defineDeviceFolder.cpp -ljsoncpp -lopen62541 -L /usr/local/libs -ljsoncpp -L.-lssh -o unifiedAccessServer
会出现bug:
In file included from unifiedAccessServer.cpp:6: baseModels/control/ec/ecBaseModel.h:2:10: fatal error: json.h: No such file or directory 2
| #include <json.h> | ^~~~~~~~ compilation terminated.
这应该是jsoncpp库没有被链接导致的错误,但反复检查,这个库已经安装了,也用-ljsoncpp链接了,也试过指定库的位置,但还是会报错,可能的问题:
因为这个报错就是无法找到jsoncpp这个标准库文件导致的,即利用-L /usr/local/libs指定的位置实际上没有jsoncpp库,即利用pkg-config命令找的位置可能并非最终库文件所在位置。
3. debug:
将有关的源文件下载后,编译直接保存在工程目录下,具体可参考:https://blog.csdn.net/zywhehe/article/details/108106315
使用其中第一大点方法“一、JsonCpp源代码——超级简单,推荐!!!”
https://github.com/open-source-parsers/jsoncpp/wiki/Amalgamated-(Possibly-outdated)
(1)下载.ZIP包,解压
(2)python执行amalgamate.py
(3)将dist目录下的两个.h文件和一个.cpp文件复制到项目代码文件目录下
(3)在项目中添加现有项,加入上述文件
修改jsoncpp.cpp中的头文件为对应引用:#include "json.h"
针对我的项目,在利用python编译出jsoncpp库的有关.cpp,.h文件后,进行如下修改:
(1)将源码加入源代码目录
其中lib文件夹为(都是python执行amalgamate.py生成的文件)
(2)然后将引用json.cpp的地方全改为#include "json.h",如(注意,这个ecBaseModel.h文件是在baseModels文件夹目录中的,非根目录中的;这样也是可以的)
(3)在当前根目录,即EC-after文件夹中输入编译命令:
g++ -fdiagnostics-color=always -g -Ilib unifiedAccessServer.cpp baseModels/control/ec/ecBaseModel.cpp baseModels/control/ec/ecBaseModel.h baseModels/defineDeviceFolder.h baseModels/defineDeviceFolder.cpp -ljsoncpp -lopen62541 -lssh -o unifiedAccessServer
其中-I(大写的i)l(小写的L)ib,指定了库文件的位置,即可编译成功!
但还是无法适配于arm架构,仍需要调整
标签:baseModels,记录,ecBaseModel,jsoncpp,编译,cpp,debug,ec From: https://www.cnblogs.com/Daemon17/p/18191172