Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346774
  • 博文数量: 108
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 65
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-16 11:38
文章分类
文章存档

2016年(2)

2015年(44)

2014年(62)

分类: LINUX

2015-08-08 14:32:26

原文地址:json-c-0.8移植到ARM平台 作者:mfr007

环境:fedora
源码:json-c-0.8.tar.gz
交叉编译环境:arm-unknown-linux-gnu-gcc(您的交叉编译工具

[root@mfr json-c-0.8]#tar –xzvf json-c-0.8.tar.gz
[root@mfr json-c-0.8]#cd json-c-0.8
[root@mfr json-c-0.8]#./configure CC= arm-unknown-linux-gnu-gcc –host=arm-unknown-linux –build=i686-pc-linux
checking for a BSD-compatible install... /usr/bin/install -c                                                                
checking whether build environment is sane... yes                                                                           
checking for a thread-safe mkdir -p... /bin/mkdir -p                                                                        
checking for gawk... gawk                                                                                                   
checking whether make sets $(MAKE)... yes                                                                                   
checking for arm-unknown-linux-strip... no      ---------应该是 arm-unknown-linux-gnu-strip                                                                           
checking for strip... strip                                                                                                 
configure: WARNING: In the future, Autoconf will not detect cross-tools                                                     
whose name does not start with the host triplet.  If you think this                                                         
configuration is useful to you, please write to autoconf@gnu.org.                                                           
checking for style of include used by make... GNU                                                                           
checking for arm-unknown-linux-gcc... arm-unknown-linux-gnu-gcc                                                             
checking for C compiler default output file name... a.out                                                                   
checking whether the C compiler works... yes                                                                                
checking whether we are cross compiling... yes                                                                              
checking for suffix of executables...                                                                                       
checking for suffix of object files... o                                                                                    
checking whether we are using the GNU C compiler... yes                                                                     
checking whether arm-unknown-linux-gnu-gcc accepts -g... yes                                                                
checking for arm-unknown-linux-gnu-gcc option to accept ISO C89... none needed                                              
checking dependency style of arm-unknown-linux-gnu-gcc... gcc3                                                              
checking how to run the C preprocessor... arm-unknown-linux-gnu-gcc -E                                                      
checking for grep that handles long lines and -e... /bin/grep                                                               
checking for egrep... /bin/grep -E                                                                                          
checking for ANSI C header files... yes                                                                                     
checking for sys/types.h... yes                                                                                             
checking for sys/stat.h... yes                                                                                              
checking for stdlib.h... yes                                                                                                
checking for string.h... yes                                                                                                
checking for memory.h... yes                                                                                                
checking for strings.h... yes                                                                                               
checking for inttypes.h... yes                                                                                              
checking for stdint.h... yes                                                                                                
checking for unistd.h... yes                                                                                                
checking fcntl.h usability... yes                                                                                           
checking fcntl.h presence... yes                                                                                            
checking for fcntl.h... yes                                                                                                 
checking limits.h usability... yes                                                                                          
checking limits.h presence... yes                                                                                           
checking for limits.h... yes                                                                                                
checking for strings.h... (cached) yes                                                                                      
checking syslog.h usability... yes                                                                                          
checking syslog.h presence... yes                                                                                           
checking for syslog.h... yes                                                                                                
checking for unistd.h... (cached) yes                                                                                       
checking sys/param.h usability... yes                                                                                       
checking sys/param.h presence... yes                                                                                        
checking for sys/param.h... yes                                                                                             
checking stdarg.h usability... yes                                                                                          
checking stdarg.h presence... yes                                                                                           
checking for stdarg.h... yes                                                                                                
checking for an ANSI C-conforming const... yes                                                                              
checking for size_t... yes                                                                                                  
checking for vprintf... yes                                                                                                 
checking for _doprnt... no                                                                                                  
checking for working memcmp... no                                                                                           
checking for stdlib.h... (cached) yes                                                                                       
checking for GNU libc compatible malloc... no                                                                               
checking for stdlib.h... (cached) yes                                                                                       
checking for GNU libc compatible realloc... no                                                                              
checking for strndup... yes                                                                                                 
checking for strerror... yes                                                                                                
checking for vsnprintf... yes                                                                                               
checking for vasprintf... yes                                                                                               
checking for open... yes                                                                                                    
checking for vsyslog... yes                                                                                                 
checking for strncasecmp... yes                                                                                             
checking build system type... i686-pc-linux-gnu                                                                             
checking host system type... arm-unknown-linux-gnu                                                                          
checking for a sed that does not truncate output... ./configure: line 5419: echo: write error: Broken pipe                  
/bin/sed                                                                                                                    
checking for fgrep... /bin/grep -F                                                                                          
checking for ld used by arm-unknown-linux-gnu-gcc... /usr/local/arm/arm-unknown-linux-gnu/arm-unknown-linux-gnu/bin/ld      
checking if the linker (/usr/local/arm/arm-unknown-linux-gnu/arm-unknown-linux-gnu/bin/ld) is GNU ld... yes                 
checking for BSD- or MS-compatible name lister (nm)... no                                                                   
checking for arm-unknown-linux-dumpbin... no           ---没有此命令                                                                     
checking for arm-unknown-linux-link... no        ---没有此命令                                                                             
checking for dumpbin... no                                                                                                  
checking for link... link -dump -symbols                                                                                    
checking the name lister (link -dump -symbols) interface... BSD nm                                                          
checking whether ln -s works... yes                                                                                         
checking the maximum length of command line arguments... 1966080                                                            
checking whether the shell understands some XSI constructs... yes                                                           
checking whether the shell understands " ="... yes                                                                          
checking for /usr/local/arm/arm-unknown-linux-gnu/arm-unknown-linux-gnu/bin/ld option to reload object files... -r
checking how to recognize dependent libraries... pass_all
checking for arm-unknown-linux-ar... no    ---应该是arm-unknown-linux-gnu-ar
checking for ar... ar
checking for arm-unknown-linux-strip... strip   ---应该是arm-unknown-linux-gnu-strip
checking for arm-unknown-linux-ranlib... no   ---应该是arm-unknown-linux-gnu-ranlib
checking for ranlib... ranlib
checking command to parse link -dump -symbols output from arm-unknown-linux-gnu-gcc object... failed
checking for dlfcn.h... yes
checking for objdir... .libs
checking if arm-unknown-linux-gnu-gcc supports -fno-rtti -fno-exceptions... no
checking for arm-unknown-linux-gnu-gcc option to produce PIC... -fPIC -DPIC
checking if arm-unknown-linux-gnu-gcc PIC flag -fPIC -DPIC works... yes
checking if arm-unknown-linux-gnu-gcc static flag -static works... yes
checking if arm-unknown-linux-gnu-gcc supports -c -o file.o... yes
checking if arm-unknown-linux-gnu-gcc supports -c -o file.o... (cached) yes
checking whether the arm-unknown-linux-gnu-gcc linker (/usr/local/arm/arm-unknown-linux-gnu/arm-unknown-linux-gnu/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating json.pc
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands

[root@mfr json-c-0.8]# make                                                                                                  
显示内容略

[root@mfr json-c-0.8]# make install
显示内容略

至此交叉编译完毕

json头文件将被安装在/usr/local/include/json目录
交叉编译后的动态库文件被安装在/usr/local/lib目录

编译json源码中自带的例子
[root@mfr json-c-0.8]##arm-unknown-linux-gnu-gcc –ljson –I/usr/local/include/json/ -L/usr/local/lib –o test2 test2.c –std=c99

出现undefined reference to “rpl_malloc”和undefined reference to “rpl_realloc”两处未定义错误,费了半天劲终于发现需要手动修改Makefile和config.h.in才能解决上面问题。

手动修改Makefile
1、 STRIP=arm-unknown-linux-gnu-strip
2、 AR= arm-unknown-linux-gnu-ar
3、 RANLIB= arm-unknown-linux-gnu-ranlib

手动修改config.h.in
屏蔽掉 
#undef malloc
#undef realloc

修改完上面两个文件,重新执行make和make install

编译json源码中自带的例子,交叉编译时一定要指定 -std=c99,为什么自己百度。。。
[root@mfr json-c-0.8]##arm-unknown-linux-gnu-gcc –ljson –I/usr/local/include/json/ -L/usr/local/lib –o test2 test2.c –std=c99
编译通过,此时在当前目录生成test2可执行文件


将/usr/local/lib目录下得libjson.*和pkgconfig目录都拷贝到ARM设备上得文件系统的/lib目录,
将test2拷贝到ARM设备上文件系统的/tmp目录,执行test2可得到正确结果。。。。。



至此json-c-0.8移植成功移植到arm系统,以后可以使用c语言编写的cgi返回JSON格式数据到客户端浏览器,浏览器使用javascript解析JSON数据,这样客户端浏览器和服务器端的数据传递方式清楚了。。。。
阅读(2847) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~