1

我已经使用 cmake 和 openembedded 交叉编译了这个 qt app 1 。它是从 i686 交叉编译到 geode 的,所以我想如果我链接到 geode 库,我应该能够在我编译它的 i686 主机上运行它。正如您从图像中看到的那样,它运行得不太正确。使用 strace 似乎表明 qt 对所有内容都使用了一些有趣的编码,例如:

stat64("\342\274\200\347\200\200\347\210\200\346\274\200\346\214\200", 0x869566c) = -1 ENOENT (No such file or directory)

有任何想法吗?

谢谢,杰恩

qt应用

4

2 回答 2

1

当您进行交叉编译时,这意味着您创建了一个二进制文件,该二进制文件将在与您编译它的架构不同的架构上运行。在您的情况下,这意味着您已经使用 i686 机器构建了一个应该在 geode 架构上运行的二进制文件。您的应用程序正在您的计算机上查找 Qt 库,这就是它运行的原因。但是,当 Qt 构建您的应用程序时,它会将一些代码转换为特定于 geode 的代码,因此它不是“真正”工作的。

如果您尝试使用非 Qt 应用程序执行此操作,则在尝试运行此程序时会出现错误。

要测试您的交叉编译应用程序,您必须在支持 geode 拱门的 Qemu 中运行它。OpenEmbedded 通常提供一个 Qemu 目标。检查 geode 的可用目标,Qemu 应该有一个。完成后,您可以将您的应用程序包含在生成的 Qemu 映像中,或者将其复制到 Qemu 映像中,然后您可以运行它。

于 2011-01-04T18:29:40.957 回答
0

问题原来是当我编译 qt 时,因为我已经编译了 libiconv,qt 正在使用它,而不是 gconv(glibc 中的 iconv)。当我去运行它时,它使用的是交叉编译的 libiconv,所以我仍然不确定它为什么不起作用。

擦干净我的交叉编译,并在没有 libiconv 的情况下编译 qt 工作得很好。

从那以后,我也设法让它在 x86_64 主机上运行。

于 2011-01-05T03:58:28.963 回答