交叉编译的 ICU4C 不起作用(所有应用程序都以代码 "1" 退出)



我在使用 ICU4C 版本 52 时遇到问题。

我使用 TI 提供的工具链 (SDK 6.00.00) 为 TI AM335x 板交叉编译了它;我的开发机器是 Ubuntu 12.04 LTS 32 位。

问题是,当我将库部署到目标平台并启动任何工具(如icuinfo甚至任何依赖于 ICU 的应用程序,例如 QT 应用程序)时,它会以代码 1 退出(并且不生成输出)。如果我strace命令,我将获得您可以在此处找到的输出。

换句话说,似乎有人在加载libicudata.so.52后呼叫exit_group(1)

但是为什么?如何解决问题?


仅供参考,以下是我交叉编译 ICU 的方式(也许我犯了一些错误?

1)首先,我为我的开发机器编译了ICU:

./configure --host=arm-linux-gnueabihf --prefix=/opt/icu
  --disable-samples --disable-tests --with-cross-build=/opt/icupc

其次:

make && make install

2)然后我交叉编译了ICU:我已经设置了我的环境变量ARCCCFLAGSLDFLAGSLIBSCPPFLAGSCXXCXXFLAGSCPP指向我的交叉编译工具链,然后:

./configure --host=arm-linux-gnueabihf --prefix=/opt/icu
  --with-cross-build=/home/morix/devel/icupc/source

其次:

make && make install

3)最后,我将/opt/icu的内容复制到我的目标平台,并尝试运行icuinfo,但没有运气(如前所述)。

我找到了解决方案或至少是一种解决方法。

由于我无法确定的原因,ICU 无法在启动时加载其数据(嵌入在 libicudata.so.52 中)(使用 Linaro GCC 工具链为 ARM 交叉编译时)。

深入研究 ICU 文档后,我发现我可以编译 ICU 以不同的方式打包数据,因此我决定将它们打包在标准文件中。ICU 交叉编译的配置是这样完成的:

./configure --host=arm-linux-gnueabihf --prefix=/opt/icu
  --disable-samples --disable-tests
  --with-cross-build=/home/morix/devel/icupc/source
  --with-data-packaging=files

在运行时,我必须设置我的环境变量ICU_DATA指向数据文件夹(在我的例子中是/opt/icu/share/icu/52.1),神奇的事情就完成了:ICU 运行良好(icuinfo工具以 ICU Initialization returned: U_ZERO_ERROR 终止,这表明成功)。

相关内容

  • 没有找到相关文章

最新更新