我遇到了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:我已经设置了我的环境变量AR
,CC
,CFLAGS
,LDFLAGS
,LIBS
,CPPFLAGS
,CXX
,CXXFLAGS
,CPP
用于指向我的交叉编译工具链,然后:
./configure --host=arm-linux-gnueabihf --prefix=/opt/icu
--with-cross-build=/home/morix/devel/icupc/source
接下来是:
make && make install
3)最后我将/opt/icu
的内容复制到我的目标平台,并且我试图运行icuinfo
,但没有运气(如前所述)。
答案 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
终止,表示成功。)