最近一段时间由于项目原因,需要将现有应用程序移植到mips平台的openwrt系统上。使用对应的编译工具链编译应用程序后就扔到系统上跑了,但是看log发现汉字转码部分报错(utf-8和gbk互转),iconv_open返回值为-1,errno为2。将转码格式中的gbk换成其他格式不报错,因此猜测是库中缺少对gbk编码的支持。
网上查了下发现openwrt中自带库对很多亚洲字符集做了屏蔽,解决方法下载libiconv源码,交叉编译产生需要的库文件。
我下载的是libiconv-1.15.tar.gz,解压该文件,进入文件目录执行(注:先配置编译工具链环境然后执行下列操作):
./configure --host=mipsel-openwrt-linux --enable-shared --enable-static --prefix=/usr/local/
make
make install
之后在/usr/local/lib/目录下可以找到libiconv的静态库(libiconv.a)和动态库(libiconv.so),在/usr/local/include/目录下可以找到头文件iconv.h。将库文件和头文件复制到项目中重新编译应用程序,将生成的应用程序再次扔到系统中跑,问题解决。
(注:本篇只是记录自己解决问题的方法,如果有错误之处,还望各位博友不吝指正)