运行demo时出现一个问题:
QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
原因是缺少iconv库,解决方案如下。
1、下载源码
http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz
2、解压缩,并在根目录中创建文件autoconfig.sh如下:
./configure \
CC=/请替换为交叉编译器目录/aarch64-none-linux-gnu-gcc \
CXX=/请替换为交叉编译器目录/aarch64-none-linux-gnu-g++ \
--prefix=/opt/libiconv_install/ \
--host=arm-linux \
--enable-shared \
--enable-static \
--with-sysroot=/请替换成工具链中的根文件系统目录
3、make -j8
出现如下错误:
./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function); did you mean ‘fgets’?
1010 | _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
| ^~~~~~~~~~~~~~~
Makefile:914: recipe for target 'progname.o' failed
make[2]: *** [progname.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory '/mnt/data/libiconv-1.14/srclib'
Makefile:865: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/mnt/data/libiconv-1.14/srclib'
Makefile:33: recipe for target 'all' failed
make: *** [all] Error 2
将文件libiconv-1.14/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
4、重新make -j8
5、make install
6、相关库将安装到/opt/libiconv_install,将该目录压缩-->传到开发板-->解压。
7、执行如下命令:
root@my-dev:~# export LD_PRELOAD=/opt/libiconv_install/lib/preloadable_libiconv.so
8、再运行Demo,一切正常。