移植libicu找不到libicudata.so的问题

最近做一个项目,要移植Qt程序到开发板上。交叉编译Qt的时候带上了icu的选项,然而这个库还需要自己交叉编译。很久之前搞好过一次,现在系统炸了没备份又要重新搭环境。写个文章做个记录。

我按照github上面的教程(https://unicode-org.github.io/icu/userguide/icu4c/build.html)先编译x86版本的,后编译armhf版本。然后把so文件都复制到开发板,发现找不到libicudata.so,但是很明显目录下有这个文件。

我用readelf看了一下,发现这个库文件是soft-float ABI,其他都是hard-float的。开发板是需要hard-float的库。然后无论我怎么修改各种环境变量生成的都是soft-float版本的。

最后,在google上查了一圈,其实官网上也有说到这个icudata问题(https://unicode-org.github.io/icu/userguide/icu_data/#building-and-linking-against-icu-data) 大意就是,如果想要跨平台移植的话,应当在configure后的参数指明打包成文件形式。

--with-data-packaging=archive #或者是files

并在运行程序的时候指定环境变量ICU_DATA,即icu数据的目录

export ICU_DATA=$APP_DIR/share/icu/$ICU_VERSION/

而且就算不以这种方式编译,也会生成一个不带数据的libicudata.so在stubdata目录下面。链接这个库就可以解决问题了。

再次检查这个库的elf,发现已经是hard-float了

readelf -h libicudata.so

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值