小记
-
这里有一篇讲交叉编译的博客:
https://blog.csdn.net/u012230668/article/details/89021750 -
一篇讲gcc -I -L -l区别的博客:
https://www.cnblogs.com/alan666/p/8311984.html -
在Linux系统下编写文件的方法:
https://www.cnblogs.com/zy10/p/11544096.html
编写完依次按下ESC、Shift+‘:’
'wq!'代表提交,'q!'不提交
笔记
fscanf跟fgets的区别
fscanf 位于头文件<stdio.h>中,函数原型为 int fscanf(FILE * stream, const char * format, [argument…]); 其功能为根据数据格式(format)从输入流(stream)中读入数据(存储到argument);与fgets的差别在于:fscanf遇到空格和换行时结束,注意空格时也结束,fgets遇到空格不结束
这里有一篇讲使用cJSON的博客,过程还挺详细的:
https://www.jianshu.com/p/9aa57961b17b
我在使用的过程中碰见一些小问题,正在解决:
先是报这个错误:
hello.c:(.text+0x1a): undefined reference to `cJSON_Parse'
后来发现需要在编译的时候加入 -lcjson
gcc hello.c -lcjson -o hello
加入后又报另外的错误
cannot find -lcjson
这里有一篇讲解决办法的博客:
https://blog.csdn.net/mark20170902/article/details/51671477
这个先放一放
先搞一下交叉编译
交叉编译
-L -I(大写i) -l
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld
参数说明:
-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home/hello/include–>/usr/include–>/usr/local/include
-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib–>/lib–>/usr/lib–>/usr/local/lib
-lworld表示在上面的lib的路径中寻找libworld.so动态库文件
参考自:http://blog.csdn.net/jiafu1115/article/details/8842240
我先实现一个最基本的Demo,把这个交叉编译的流程走一下。通过arm-linux-gcc 编译一个 可执行文件,然后移植到设备上跑起来。
开搞
解释一下交叉编译:
交叉编译就是为了解决我们在嵌入式设备上不方便直接编程的一种技术手段,这里我主要是用到了 在Linux上编译生成Arm上的可执行文件,再通过xmanager移植到arm上。
这里有一篇详细的博客,介绍交叉编译:
https://www.cnblogs.com/coolYuan/p/9037660.html
先下载工具链:arm-linux-gcc
-
arm-linux-gcc下载:
http://www.arm9.net/download.asp -
然后参照这个博客进行环境配置就好了:
https://www.cnblogs.com/mfyfymeng/p/11895795.html
(落地成功)
我在这稍微梳理一下,上截图
- 将下载好的arm-linux-gcc-4.3.2.tgz压缩包放到 tmp 文件夹下(注意文件路径,从最底层开始的,而不是home层)
然后解压
sudo tar -zxvf arm-linux-gcc-4.3.2... .tgz -C /usr/local/arm/
在etc / environment 的 path 中添加
:usr/local/arm/4.5.1/bin/
添加后入下图所示:
到此就应该可以用了,测试一下:
arm-linux-gcc -v
测试结果如图:
落地
后期:我发现落地失败了,这个打印的版本号是4.6.2,我现阶段在整合cJSON的时候,使用arm-linux-gcc编译失败,原因目前认为是32位跟64位不匹配,待解决。
在移植到设备上后又碰到麻烦了,提示没有权限执行
待解决(落地)
解决办法:
在xftp中的可执行文件下右键选择图示选项:
勾选权限:
可执行: