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

时间:2014-04-04 09:55:15

标签: cross-compiling icu

我遇到了ICU4C第52版的问题。

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

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

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

但为什么呢?我该如何解决这个问题?


仅供参考,这是我如何交叉编译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,但没有运气(如前所述)。

1 个答案:

答案 0 :(得分:1)

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

由于我无法确定的原因,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运行良好({{ 1}}工具以icuinfo终止,表示成功。)