争怎路由网/系统工具/内容

andorid编译报错serve_image.c:32:18的因素及处理方法

系统工具2024-06-11 阅读
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。
在编译海思SDK时,会出现如下错误:
serve_image.c:32:18: error: storage size of ‘hints’ isn’t known
serve_image.c:94:19: error: ‘AI_ADDRCONFIG’ undeclared (first use in this function)
serve_image.c:99:40: warning: implicit declaration of function ‘gai_strerror’ [-Wimplicit-function-declaration]
fprintf(stderr,"getaddrinfo: %s\n", gai_strerror(ret));
fprintf(stderr,"getaddrinfo: %s\n", gai_strerror(ret));
serve_image.c:103:35: error: dereferencing pointer to incomplete type ‘struct addrinfo’
make[6]: *** [/home/sky2_klockwork/motianbiao/hmtisi/sdk/kitkat/out/target/product/Hi3798MV100/obj/ TOOLS_OBJ/mtd-utils/tmp/mtd-utils-1.5.0/serve_image.o] Error 1
make[5]: *** [/home/sky2_klockwork/motianbiao/hisi/sdk/kitkat/out/target/product/Hi3798MV100/obj/ TOOLS_OBJ/mtd-utils/tmp/sbin/mkfs.jffs2] Error 2
make[4]: [mkmtdutils_tool] Error 1 (ignored)
make[4]: [mkmtdutils_tool] Error 1 (ignored)
make[4]: [mkmtdutils_tool] Error 1 (ignored)
 
究其原因,在于ubuntu操作系统版本太高,而SDK使用的mtd-utils版本太低导致(device/hisilicon/bigfish/sdk/tools/linux/utils/mtd-utils/mtd-utils-1.5.0),正常情况下,ubuntu12.04.04下支持mtd-utils-1.5.0,但是ubuntu16.04版本兼容不是很好,但是16.04支持mtd-utils-2.0.0版本,所以,解决办法有如下几种:
 
方法1.修改sdk版本下的mtd-utils-1.5.0为mtd-utils-2.0.0,可以在root权限下通过命令:wget ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-2.0.0.tar.bz2 获取,然后替换device/hisilicon/bigfish/sdk/tools/linux/utils/mtd-utils/下的mtd-utils-1.5.0.tar.bz2版本。
 
方法2.修改操作系统头文件/usr/include/netdb.h,将此宏__USE_XOPEN2K注释。(注意#ifdef与#endif是一一对应的)
 
方法3.当然是修改操作系统的内核版本咯,可以通过如下命令更换操作系统内核版本:
①sudo apt-cache search linux-image(搜索可下载内核)
②sudo apt-get install linux-image-2.6.32-21-generic(下载内核)
③更换系统内核:sudo vim /boot/grub/grub.cfg
④set default="0" #内核默认启动顺序从0开始依次类推,如果数错了进入恢复模式,开机时按shift选择启动内核(可以通过grep menuentry /boot/grub/grub.cfg查看位置)
 
以上3中方法,就看哪种更适合你了。

Linux是一套免费使用和自由传播的类Unix操作系统



……

相关阅读