我在嵌入式 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) 提供的相同工具链。
一切正常:我基于控制台的“hello, world”应用程序已编译,然后我可以将其部署到设备(设置让 QT 找到自己的库所需的所有请求环境变量)。
但问题来了:
应用程序总是以代码 1 退出并且不产生任何输出。
如果我 strace
我的应用程序,运行 strace -o trace.log ./TestConsole
然后它会产生您可以找到的输出 here .
换句话说,似乎有人在加载 libicudata.so.52
之后调用 exit_group(1)
。
但是是谁在调用它呢?为什么?
请考虑如果我在没有 ICU 支持的情况下交叉构建 QT,那么我可以针对它编译和运行应用程序...所以我认为它与 ICU 相关...对此有什么想法吗?
最佳答案
我发现了问题:问题是ICU相关的。
我注意到即使在目标平台上执行工具/opt/icu/bin/icuinfo 在启动时也会以 1 退出(您可以找到完整的 strace 日志 here)。
一个新的 ICU 相关问题已发布 here ,所以我认为这个问题可以关闭。
关于linux - 具有 ICU 支持的 Qt 5.2.1 : all applications exit with code 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22858103/