我在嵌入式Linux上运行QT 5.2.1应用程序时遇到问题(所有这些应用程序,甚至是最简单的“hello world”,代码为1)。
我使用TI提供的工具链(SDK 6.00.00)为Linux嵌入式设备(TI AM335x)交叉编译QT 5.2.1。我还添加了ICU支持(因为我计划交叉编译QtWebkit,ICU是必需的依赖项)。
所以,我之前构建了ICU(版本52),然后使用以下配置交叉编译QT:
./configure -prefix /opt/qt5 -opensource -confirm-license -platform linux-g++
-icu -I /opt/icu/include -L /opt/icu/lib -R /opt/icu/lib -no-cups -no-nis
-no-dbus -no-pch -no-accessibility -no-gtkstyle -no-xcb -eglfs -no-directfb
-qpa eglfs-xplatform linux-arm-gnueabihf-g++ -opengl es2 -nomake examples
-nomake tests -v
(以前构建的ICU库位于/ opt / icu / lib中)。
然后像往常一样使用make && make install
编译QT。
然后我在开发机器(Ubuntu 12.04 LTS 32位)上配置了我的QT Creator IDE,用于编译针对新QT版本的应用程序,只是交叉编译,使用TI提供的相同工具链(SDK 6.00.00)。 / p>
一切都很好:我的基于控制台的“hello,world”应用程序已经过编译,然后我可以将它部署到设备上(设置让QT找到自己的库所需的所有请求的环境变量)。
但问题出在:
应用程序总是以代码1退出并且不产生输出。
如果我strace
我的应用程序,运行strace -o trace.log ./TestConsole
,那么它会生成您可以找到here的输出。
换句话说,似乎有人在加载exit_group(1)
之后正在调用libicudata.so.52
。
但是谁在呼唤它?为什么?
请考虑如果我在没有ICU支持的情况下交叉构建QT,那么我可以针对它编译和运行应用程序......所以我认为它与ICU相关......有什么想法吗?