Запуск кросс-скомпилированного приложения qt - PullRequest
1 голос
/ 28 декабря 2010

У меня есть это приложение qt 1 , которое я кросс-компилировал с использованием cmake и openembedded. Он кросс-компилируется из i686 в geode, поэтому я полагаю, что смогу запустить его на хосте i686, на котором я его скомпилировал, если буду ссылаться на библиотеки geode. Как вы можете видеть на картинке, он работает не совсем правильно. Использование strace, похоже, указывает на то, что qt использует какую-то забавную кодировку для всего, например ::10000

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

Есть идеи?

Спасибо, Jayen

qt app

Ответы [ 2 ]

1 голос
/ 04 января 2011

Когда вы кросс-компилируете, это означает, что вы создаете двоичный файл, который будет работать на архитектуре, отличной от той, на которой вы его скомпилировали. В вашем случае это означает, что вы использовали свой компьютер i686 для создания двоичного файла, который должен работать на архитектуре geode. Ваше приложение находит библиотеки Qt на вашем компьютере, и поэтому оно работает. Однако, когда Qt собрал ваше приложение, оно преобразовало некоторый код в специфичный для геоданных, таким образом, оно не «действительно» работает.

Если вы попробуете это с приложением, отличным от Qt, вы получите сообщение об ошибке при попытке запустить это.

Чтобы протестировать ваше кросс-скомпилированное приложение, вам нужно будет запустить его в Qemu, который поддерживает geode arch. OpenEmebedded обычно предоставляет цель Qemu. Проверьте доступные цели для geode, там должна быть одна для Qemu. После этого вы можете включить свое приложение в состав создаваемого образа Qemu или скопировать его поверх себя в образ Qemu, а затем запустить его.

0 голосов
/ 05 января 2011

Проблема оказалась в том, что когда я компилировал qt, потому что я уже скомпилировал libiconv, qt использовал это вместо gconv (iconv в glibc). Когда я запускал его, он использовал кросс-скомпилированный libiconv, так что я до сих пор не уверен, почему это не сработало.

Чистка моей кросс-компиляции и компиляция qt без libiconv работали просто отлично.

С тех пор мне удалось запустить его и на хосте x86_64.

...