解决交叉编译64位Qt5.15中遇到的问题

21 篇文章 0 订阅
8 篇文章 10 订阅

运行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,一切正常。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值