Russian Qt Forum
Ноябрь 23, 2024, 03:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Сборка под ARM.  (Прочитано 20686 раз)
Павел_F.
Гость
« : Март 25, 2010, 13:46 »

Изначальные данные:
Есть Windows 7 и настроенный Sourcery G++ Lite. Вполне успешно компилю проги написанные на с++ все пока замечательно.
Есть мысль использовать в нашей железке Qt.
Скачал по ссылке с офф сайта qt-everywhere-opensource-src-4.6.2.tar.gz как я понял у них сейчас один архив для всех. Ибо по другой ссылке для windows я скачал его же.
Теперь, следую мануалу с офф сайта делаю:
Иду в QtDir/mkspecs/qws/linux-arm-g++ и правлю в qmake.conf. Меняю по файлу *arm-linux-* на свои *arm-none-linux-gnueabi-*

сделал себе батник:
Код
Bash
set PATH=D:\SourceryG++Lite;%PATH%
set QMAKESPEC=win32-g++
cmd.exe
 
Запустил его. В появившейся консоли пишу configure -embedded arm -xplatform qws/linux-arm-g++.
В ответ получаю:
Unknown option arm
Invalid option "qws/linux-arm-g++" for -xplatform
Ну и далее перечисление возможных опций...

Что я делаю не так? Уже два для гуглю и читаю все подряд. Нигде решения не нашел.
Записан
Rcus
Гость
« Ответ #1 : Март 25, 2010, 17:09 »

Интересно Улыбающийся если сырцы tools/configure соответствуют бинарнику то понятно почему оно так происходит (поиск по сообщениям сразу наводит на возможные точки сбоя), только разбираться с этим нет ни желания, ни возможности. Да отлаживаться проще в X11 среде с похожим набором библиотек и qvfb.
Записан
Павел_F.
Гость
« Ответ #2 : Март 25, 2010, 17:32 »

Никакой поиск меня никуда не привел. Задача стоит такая что нужно это наладить и для windows и для linux.
Ладно бы чего-то не хватало или не компилилось... Можно было разбираться. А тут даже не знаю куда податься. Опция должна быть а как бы нет...
« Последнее редактирование: Март 25, 2010, 17:42 от Павел_F. » Записан
Rcus
Гость
« Ответ #3 : Март 25, 2010, 17:47 »

Хм... вопроизведу свой поиск.
Цитировать
cd $QTDIR
ls tools
cd tools/configure
ls
/*хм... configureapp.cpp выглядит многообещающе*/
vim configureapp.cpp
/Unknown option
/*интересно - выглядит как окончание списка if .. else if .. */
/*попробуем промотать наверх... что-то там много, лучше поищем -embedded*/
/*так - с embedded понятно - аргумент не принимает*/
/*посмотрим что там с -xplatform...*/
/*интересно - как формируется mkspecs*/
/*ищем-ищем - оппа entryList по каталогу /mkspecs, а где второй уровень? А нету*/
/*Ну на нет и суда нет :q, ^D*/
Записан
Павел_F.
Гость
« Ответ #4 : Март 26, 2010, 15:12 »

Ковыряясь в исходниках configure... Сделал так:
1) Перетащил папку linux-arm-g++ из QtDir/mkspecs/qws в QtDir/mkspecs
2) В файле qplatformdefs.h заменил ../../ на ../
3) В файле qmake.conf аналогично  ../../ на ../ а также arm-linux на arm-none-linux-gnueabi
4) Запустил configure  -arch arm -platform win32-g++ -xplatform linux-arm-g++ и еще кучка нужных мне аргументов

Теперь имеем. Configure таки прошел нормально... Уже легче.
Но на этапе выполнения make, если точнее пробовал и mingw32-make и cs-make от тулчейна, результат не меняеется, да и с чего бы он изменился. Говорит "test" не является внутренней или внешней командой, исполняемой программой или ...

Вопрос: а откуда бы ее взять эту test?. Под линукс пробегала тут, было дело... Под виндой не видел ни разу.
Записан
Павел_F.
Гость
« Ответ #5 : Март 26, 2010, 16:53 »

Мысль возникла сказать этим Qt что их инструкция Cross-Compiling Qt for Embedded Linux Applications мягко говоря не работает... Да с английским тяжело у меня.
« Последнее редактирование: Март 26, 2010, 16:56 от Павел_F. » Записан
Rcus
Гость
« Ответ #6 : Март 26, 2010, 18:14 »

Не в инструкции все в порядке, обратите на направление разделителей в путях, наверное они не предполагали что кому-то захочется собирать Qt/QWS в чужой среде.
Записан
Павел_F.
Гость
« Ответ #7 : Март 31, 2010, 09:21 »

Решил не делать новую тему а продолжить в этой.
Теперь пытаюсь тоже самое сделать в linux. И так тот же тулчейн но под linux. Так же правлю mkspec/qws/linux-arm-g++
Конфигуре запускаю так ./configure -embedded arm -xplatform qws/linux-arm-g++ -fast -no-phonon -no-webkit -no-phonon-backend -static
Оно успешно проходит, как оказалось виндовый и линуксовый конфигур отличаются как небо и земля даже по списку аргументов.
Теперь командуем make...
На нем ошибки
g++ -c -O2 -march=armv5te -mtune=arm926ej-s -s -fno-exceptions -O2 -fPIC -Wall -W -DQT_BOOTSTRAPPED -DQT_LITE_UNICODE -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_GEOM_VARIANT -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_STL -DQT_NO_SYSTEMLOCALE -DQT_NO_TEXTSTREAM -DQT_NO_THREAD -DQT_NO_UNICODETABLES -DQT_NO_USING_NAMESPACE -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I../../../mkspecs/qws/linux-x86-g++ -I. -I../../../include -I../../../include/QtCore -I../../../include/QtXml -I../../3rdparty/zlib -o .obj/release-static-emb-arm/qisciicodec.o ../../corelib/codecs/qisciicodec.cpp
../../corelib/codecs/qisciicodec.cpp:1: ошибка: некорректное значение (armv5te) для ключа -march
../../corelib/codecs/qisciicodec.cpp:1: ошибка: некорректное значение (arm926ej-s) для ключа -mtune=

С этим что делать? Гугл как-то не очень помогает...
Записан
Rcus
Гость
« Ответ #8 : Март 31, 2010, 10:36 »

Хм... Я вообще собирал без ключа xplatform, ибо -embedded сам все ставит.
А не покаже $QTDIR/src/tools/bootstrap/Makefile? Qt пытается собрать кусок себя чтобы использовать в qmake/moc/..., но откуда-то выползают флаги для кросскомпилятора, что-то нездоровое в этом. Вы где их задали?
Записан
Павел_F.
Гость
« Ответ #9 : Март 31, 2010, 11:12 »

А не покаже $QTDIR/src/tools/bootstrap/Makefile?
В какое место ему смотреть? Я, конечно, могу и выложить... но он такого лошадиного размера, длинный очень
Qt пытается собрать кусок себя чтобы использовать в qmake/moc/..., но откуда-то выползают флаги для кросскомпилятора, что-то нездоровое в этом. Вы где их задали?
Нигде, все что я делал я описал выше.
Сейчас попробую без xplatform.
Записан
Rcus
Гость
« Ответ #10 : Март 31, 2010, 11:44 »

В какое место ему смотреть? Я, конечно, могу и выложить... но он такого лошадиного размера, длинный очень
Собственно меня интересует секция ####### Compiler, tools and options
, а именно - CXX, *FLAGS и DEFINES.
Нигде, все что я делал я описал выше.
Сейчас попробую без xplatform.
Ага, такие вещи как "-mtune=arm926ej-s" сами по себе появляются... необязательно было задавать через флаги ./configure или mkspecs, возможно это переменные среды.
Записан
Павел_F.
Гость
« Ответ #11 : Март 31, 2010, 12:08 »

Цитата: QtDir/src/tools/bootstrap/Makefile
####### Compiler, tools and options

CC            = arm-none-linux-gnueabi-gcc
CXX           = g++
DEFINES       = -DQT_BOOTSTRAPPED -DQT_LITE_UNICODE -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_GEOM_VARIANT -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_STL -DQT_NO_SYSTEMLOCALE -DQT_NO_TEXTSTREAM -DQT_NO_THREAD -DQT_NO_UNICODETABLES -DQT_NO_USING_NAMESPACE -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE
CFLAGS        = -O2 -march=armv5te -mtune=arm926ej-s -s -fno-exceptions -O2 -fPIC -Wall -W $(DEFINES)
CXXFLAGS      = -O2 -march=armv5te -mtune=arm926ej-s -s -fno-exceptions -O2 -fPIC -Wall -W $(DEFINES)
INCPATH       = -I../../../mkspecs/qws/linux-x86-g++ -I. -I../../../include -I../../../include/QtCore -I../../../include/QtXml -I../../3rdparty/zlib
AR            = ar cqs
RANLIB        =
QMAKE         = /home/user/Qt/qt-src-4.6.2/bin/qmake
TAR           = tar -cf
COMPRESS      = gzip -9f
COPY          = cp -f
SED           = sed
COPY_FILE     = $(COPY)
COPY_DIR      = $(COPY) -r
STRIP         = strip
INSTALL_FILE  = install -m 644 -p
INSTALL_DIR   = $(COPY_DIR)
INSTALL_PROGRAM = install -m 755 -p
DEL_FILE      = rm -f
SYMLINK       = ln -f -s
DEL_DIR       = rmdir
MOVE          = mv -f
CHK_DIR_EXISTS= test -d
MKDIR         = mkdir -p
Вот он. И там они есть...
Возможно что-то добавилось когда сам тулчейн настраивали, это делал не я, я ковыряюсь с Qt. Я имею ввиду переменные среды.
В переменных среды, которые по env выводятся, есть строчка CFLAGS=-O2 -march=armv5te -mtune=arm926ej-s -s
В .bashrc у пользователя нашел строку source /home/user/cross.env
А уже в /home/user/cross.env есть строка export CFLAGS="-O2 -march=armv5te -mtune=arm926ej-s -s"
Но раз оно там, значит, наверное, оно было нужно.
Куда, что править?
« Последнее редактирование: Март 31, 2010, 12:12 от Павел_F. » Записан
Rcus
Гость
« Ответ #12 : Март 31, 2010, 12:19 »

Для Autoconf это бывает нужно, а в случае смешанной сборки - мешает.
Записан
Павел_F.
Гость
« Ответ #13 : Март 31, 2010, 12:23 »

Если честно не понял... Но убрал эту строку с -march. make мне выдал:
Цитировать
g++ -Wl,-rpath-link,/home/user/Qt/qt-src-4.6.2/lib -fno-exceptions -Wl,-O1 -Wl,-rpath,/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib -Wl,-rpath,/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib -o ../../../bin/moc release-static/moc.o release-static/preprocessor.o release-static/generator.o release-static/parser.o release-static/token.o release-static/main.o     -L/home/user/Qt/qt-src-4.6.2/src/tools/bootstrap -lbootstrap
/usr/bin/ld: /home/user/Qt/qt-src-4.6.2/src/tools/bootstrap/libbootstrap.a(compress.o): Relocations in generic ELF (EM: 40)
/home/user/Qt/qt-src-4.6.2/src/tools/bootstrap/libbootstrap.a: could not read symbols: File in wrong format
Это что еще за фокусы? Сколько не сижу с Qt никогда проблем не было, а эта сборка для арм и сам арм меня уже достал...
« Последнее редактирование: Март 31, 2010, 12:39 от Павел_F. » Записан
Rcus
Гость
« Ответ #14 : Март 31, 2010, 13:24 »

/*Вдыхает- выдыхает*/
А мне ARM нравится. Компоновщик вам английским языком говорит что compress.o не в том формате. Смотрим в src/tools/boostrap/bootstrap.pro - да это же compress.c из zlib. И собирается он компилятором указанным в CC, из-за замещения переменными среды *.c были собраны кросскомпилятором.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.154 секунд. Запросов: 21.