基于Anycloud37D平台移植cJSON
0. 环境准备
-
系统环境: Ubuntu 16.04.7
-
SDK版本:AK37D_SDK_V1.05
-
cJSON下载:
https://github.com/DaveGamble/cJSON.git
-
本次采用当前时间点最后一个版本 cJSON-1.7.15.tar.gz
1. 交叉编译
-
tar xzf cJSON-1.7.15.tar.gz
-
cd cJSON-1.7.15
-
mkdir build
-
cd build
-
cmake ../ -DBUILD_SHARED_AND_STATIC_LIBS=On -DCMAKE_INSTALL_PREFIX=/home/anyka/project/cjson/arm -DCMAKE_C_COMPILER=/opt/arm-anykav500-linux-uclibcgnueabi/bin/arm-anykav500-linux-uclibcgnueabi-gcc
-
make
-
make install
3. 测试
-
编译简单得sample:
anyka@anyka-VirtualBox:~/project/cjson$ arm-anykav500-linux-uclibcgnueabi-gcc test.c -o test -I./arm/include -I./arm/include/cjson -L./arm/lib -lcjson /opt/arm-anykav500-linux-uclibcgnueabi/bin/../lib/gcc/arm-anykav500-linux-uclibcgnueabi/4.9.4/../../../../arm-anykav500-linux-uclibcgnueabi/bin/ld: warning: libssp.so.0, needed by ./arm/lib/libcjson.so, not found (try using -rpath or -rpath-link) ./arm/lib/libcjson.so: undefined reference to `__stack_chk_fail@LIBSSP_1.0' ./arm/lib/libcjson.so: undefined reference to `__stack_chk_guard@LIBSSP_1.0'
发现出现异常报错,解决方法:
anyka@anyka-VirtualBox:~/project/cjson$ arm-anykav500-linux-uclibcgnueabi-gcc test.c -o test -I./arm/include -I./arm/include/cjson -L./arm/lib -lcjson -lssp
编译选项添加 -lssp.
-
创建一个测试用配置 conf.json:
{ "T": [ {"name": "T1","type": "s1"}, {"name": "T2","type": "s2"} ] }
-
将sample、动态库(libcjson.so.1.7.15)以及配置放到文件系统里.
-
运行sample:
[root@anyka /tmp]$ ls conf.json start_message test [root@anyka /tmp]$ chmod 777 test [root@anyka /tmp]$ ./test /tmp/test: can't load library 'libssp.so.0'
发现当前缺少库libssp.so.0
解决办法:
从工具链中拷贝libssp:
anyka@anyka-VirtualBox:~/project/AK37D_SDK_V1.05/rootfs/resource/lib$ cp /opt/arm-anykav500-linux-uclibcgnueabi/arm-anykav500-linux-uclibcgnueabi/lib/libssp.so* . -a
将其放到设备文件系统中后,重新测试运行:
[root@anyka /tmp]$ ls conf.json test [root@anyka /tmp]$ chmod 777 test [root@anyka /tmp]$ ./test Cjson version:1.7.15 i:0 name:"T1" type:"s1" i:1 name:"T2" type:"s2"
测试正常.