1

私はこのqtアプリ1を持っており、cmakeを使用してクロスコンパイルし、openembeddedを使用しています。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 arch をサポートする Qemu 内で実行する必要があります。通常、OpenEmebedded は 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 に答える