iconv_open在ARM平台返回-1,其原因是ARM平台可能没有安装libiconv库,现在解决方法是自行交叉编译后进行安装,步骤如下:
一、下载iconv源代码
下载路径:http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz
二、交叉编译
2.1、修改srclib/stdio.in.h文件
找到 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");这一行,然后在这一行的前后加上条件编译即可,修改后的内容如下:
#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif
2.2、配置并编译
./configure --prefix=$PWD/out --host=arm-linux
make && make install
三、安装到ARM平台
拷贝out/lib/preloadable_libiconv.so到ARM平台的/lib目录,设置系统环境变量如下:
export LD_PRELOAD=/lib/preloadable_libiconv.so
至此安装完成,重新运行程序输出正常。