Запуск кросс-компилированного приложения qt

У меня есть приложение qt1, которое я кросс-компилировал с помощью cmake и открытый встроенный. Он скомпилирован с i686 на geode, поэтому я полагаю, что смогу запустить его на хосте i686, на котором я его скомпилировал, если я слинкуюсь с библиотеками geode. Судя по картинке, работает не совсем корректно. Использование 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


person Jayen    schedule 28.12.2010    source источник


Ответы (2)


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

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

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

person Misha M    schedule 04.01.2011
comment
:( Я делаю все это без root-доступа, поэтому qemu мне не подходит. - person Jayen; 05.01.2011
comment
Вам нужен root, только если вы пытаетесь использовать сеть или вам нужны драйверы для Qemu, в противном случае он будет работать нормально; немного медленно без драйверов kvm, но нормально. Есть ли причина, по которой вам нужен root? - person Misha M; 06.01.2011

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

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

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

person Jayen    schedule 05.01.2011