ARM. Кросскомпиляция.

ARM7, ARM9, ARM11 etc.

ARM. Кросскомпиляция.

Сообщение jacuba » 05 апр 2011, 09:09

Добрый день, уважаемые.
При компиляции linphon'a на машине с i686 для машины с ARM-архитектурой возникает следующая ошибка:

Конфигурация:
Код: Выделить всё
$cd linphone-3.4.3
$sudo ./configure --prefix=/home/user/armbuild --host=i686-pc-linux --target=arm-linux --disable-static --disable-glib --enable-gnome_ui=no --disable-manual --enable-alsa --with-speex=/home/user/speex


Конфигурация проходит успешно, но в конце получаю предупреждение:
Код: Выделить всё
configure: WARNING: ortp-0.15.0 breaks compatibility with older releases, because value returned by rtp_session_recvm_with_ts() has
changed. See the API documentation in doc/ for further readings.
Linphone build configuration ended.
* GTK interface will be compiled.
* Console interface will be compiled.
Now type 'make' to compile, and then 'make install' as root to install it.


После этого делаю sudo make и получаю ошибку:
Код: Выделить всё
CCLD   mediastream
../src/.libs/libmediastreamer.so: undefined reference to `speex_echo_cancellation'
../src/.libs/libmediastreamer.so: undefined reference to `speex_echo_state_init'
../src/.libs/libmediastreamer.so: undefined reference to `speex_preprocess_state_destroy'
../src/.libs/libmediastreamer.so: undefined reference to `speex_preprocess_state_init'
../src/.libs/libmediastreamer.so: undefined reference to `speex_echo_ctl'
../src/.libs/libmediastreamer.so: undefined reference to `speex_echo_state_destroy'
../src/.libs/libmediastreamer.so: undefined reference to `speex_preprocess_ctl'
../src/.libs/libmediastreamer.so: undefined reference to `speex_preprocess_run'
collect2: ld returned 1 exit status
make[4]: *** [mediastream] Ошибка 1
make[4]: Leaving directory `/home/user/linphone-3.4.3/mediastreamer2/tests'
make[3]: *** [all-recursive] Ошибка 1
make[3]: Leaving directory `/home/user/linphone-3.4.3/mediastreamer2'
make[2]: *** [all] Ошибка 2
make[2]: Leaving directory `/home/user/linphone-3.4.3/mediastreamer2'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/home/user/linphone-3.4.3'
make: *** [all] Ошибка 2


Собственно это и вызывает затруднение, откуда такая ошибка и как можно от нее избавиться?
Прошу у вас помощи. Заранее благодарен.
jacuba
 
Сообщения: 11
Зарегистрирован: 05 апр 2011, 09:03

Re: ARM. Кросскомпиляция.

Сообщение setar » 05 апр 2011, 10:35

я думаю что вы немного отрезали самую важную часть
скорее всего не подцепился какой либо инклуд (.h) файл
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: ARM. Кросскомпиляция.

Сообщение Strijar » 05 апр 2011, 11:21

Нет. Ошибка на этапе линковки. Не найдена библиотека speex, или найдена но она не для arm. Или она другой версии - там нет этих функций.
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: ARM. Кросскомпиляция.

Сообщение jacuba » 05 апр 2011, 11:48

setar, Strijar, спасибо за ответы,
ранее я скачивал speex отсюда и собирал следующим образом:
Код: Выделить всё
$cd ../speex-1.1.11.1
$./configure --prefix=/home/user/armbuild --host=i686-pc-linux --target=arm-linux
--disable-static --enable-fixed-point --enable-arm-asm 
$make
$make install


Сейчас я поставил пакеты: libogg-ocaml, libogg-ocaml-dev, libspeex-ocaml, libspeex-ocaml-dev, libspeexdsp-dev из репозитариев - проблема решилась. Большое спасибо.
jacuba
 
Сообщения: 11
Зарегистрирован: 05 апр 2011, 09:03

Re: ARM. Кросскомпиляция.

Сообщение jacuba » 06 апр 2011, 15:30

появилась еще одна проблема: при компиляции speex получаю следующее сообщение
Код: Выделить всё
root@debian:/home/user/arm1/speex-1.2beta2# make
make  all-recursive
make[1]: Entering directory `/home/user/arm1/speex-1.2beta2'
Making all in libspeex
make[2]: Entering directory `/home/user/arm1/speex-1.2beta2/libspeex'
/bin/bash ../libtool --mode=link arm-unknown-linux-uclibcgnueabi-gcc  -g -O2   -o testenc  testenc.o libspeex.la -lm
arm-unknown-linux-uclibcgnueabi-gcc -g -O2 -o .libs/testenc testenc.o  ./.libs/libspeex.so -lm
testenc.o: In function `fprintf':
/usr/include/bits/stdio2.h:98: undefined reference to `__fprintf_chk'
/usr/include/bits/stdio2.h:98: undefined reference to `__fprintf_chk'
/usr/include/bits/stdio2.h:98: undefined reference to `__fprintf_chk'
./.libs/libspeex.so: undefined reference to `__printf_chk'
collect2: ld returned 1 exit status
make[2]: *** [testenc] Ошибка 1
make[2]: Leaving directory `/home/user/arm1/speex-1.2beta2/libspeex'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/home/user/arm1/speex-1.2beta2'
make: *** [all] Ошибка 2


гугл вообще про это не знает
уважаемые, помогите разобраться.
jacuba
 
Сообщения: 11
Зарегистрирован: 05 апр 2011, 09:03

Re: ARM. Кросскомпиляция.

Сообщение dccharacter » 06 апр 2011, 15:38

Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: ARM. Кросскомпиляция.

Сообщение jacuba » 07 апр 2011, 10:06

Проблема решилась путем установки компилятора в /usr

Теперь при попытки конфигурирования самого libphone получаю сообщение:
Код: Выделить всё
# ./configure --prefix=/usr --host=arm-linux --with-gnu-ld --disable-static \
      --disable-glib --with-osip=$ARM_INSTALL_TREE/usr \
   --with-readline=$ARM_INSTALL_TREE/usr \
      SPEEX_CFLAGS="-I$ARM_INSTALL_TREE/usr/include" \
      SPEEX_LIBS="-L$ARM_INSTALL_TREE/usr/lib -lspeex "

...
checking eXosip2/eXosip.h usability... no
checking eXosip2/eXosip.h presence... no
checking for eXosip2/eXosip.h... no
configure: error: Could not find eXosip2 headers !


Делаю вывод, что хидеры не могут быть найдены потому что их просто нет.
Принимаю решение установить libexosip. Скачиваю и распаковываю.
Код: Выделить всё
# cd ../libeXosip2-3.5.0/
# ./configure --prefix=/usr --host=arm-linux --with-gnu-ld --disable-static
#  make
...
eXosip.c: In function `_eXosip_transaction_init':
eXosip.c:76: error: `osip_srv_record_t' undeclared (first use in this function)
eXosip.c:76: error: (Each undeclared identifier is reported only once
eXosip.c:76: error: for each function it appears in.)
eXosip.c:76: error: parse error before "record"
eXosip.c:84: error: `record' undeclared (first use in this function)
eXosip.c:88: error: `OSIP_SUCCESS' undeclared (first use in this function)
eXosip.c:90: warning: implicit declaration of function `osip_transaction_set_srv_record'
eXosip.c: In function `eXosip_transaction_find':
eXosip.c:106: error: `OSIP_SUCCESS' undeclared (first use in this function)
eXosip.c:110: error: `OSIP_NOTFOUND' undeclared (first use in this function)
eXosip.c: In function `_eXosip_retry_with_auth':
eXosip.c:130: error: `OSIP_BADPARAMETER' undeclared (first use in this function)
eXosip.c:134: error: `OSIP_UNDEFINED_ERROR' undeclared (first use in this function)
eXosip.c:154: warning: passing arg 1 of `osip_list_get' from incompatible pointer type
eXosip.c:160: error: `OSIP_SYNTAXERROR' undeclared (first use in this function)
eXosip.c:1430: warning: passing arg 1 of `osip_list_add' from incompatible pointer type
eXosip.c: In function `eXosip_update_top_via':
eXosip.c:1464: warning: passing arg 1 of `osip_list_get' from incompatible pointer type
eXosip.c:1470: error: `OSIP_SYNTAXERROR' undeclared (first use in this function)
eXosip.c:1487: error: `OSIP_SUCCESS' undeclared (first use in this function)
make[2]: *** [eXosip.lo] Ошибка 1
make[2]: Leaving directory `/root/arm1/libeXosip2-3.5.0/src'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/root/arm1/libeXosip2-3.5.0'
make: *** [all] Ошибка 2


какова причина возникновения этих ошибок? Прошу у вас помощи.
jacuba
 
Сообщения: 11
Зарегистрирован: 05 апр 2011, 09:03

Re: ARM. Кросскомпиляция.

Сообщение jacuba » 12 апр 2011, 13:23

При компиляции linphone получаю сообщение:
Код: Выделить всё
  CC     b64.lo
b64.c: In function `b64_encode_':
b64.c:209: warning: comparison is always true due to limited range of data type
b64.c:210: warning: comparison is always true due to limited range of data type
b64.c:211: warning: comparison is always true due to limited range of data type
b64.c:212: warning: comparison is always true due to limited range of data type


Строка конфигурации:
Код: Выделить всё
./configure --prefix=/armbuild/usr --host=arm-linux --with-gnu-ld --disable-static --disable-glib --with-osip=$ARM_INSTALL_TREE/usr --with-readline=$ARM_INSTALL_TREE/usr SPEEX_CFLAGS="-I$ARM_INSTALL_TREE/usr/include"         SPEEX_LIBS="-L$ARM_INSTALL_TREE/usr/lib -lspeex " --disable-video


прошу помощи в решение проблемы.
jacuba
 
Сообщения: 11
Зарегистрирован: 05 апр 2011, 09:03

Re: ARM. Кросскомпиляция.

Сообщение Strijar » 12 апр 2011, 13:39

jacuba писал(а):При компиляции linphone получаю сообщение:


Здесь нет ошибки - вы ее отрезали. Предупреждения не критичны.
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: ARM. Кросскомпиляция.

Сообщение dccharacter » 12 апр 2011, 13:40

ну привели бы строки в которых ошибки + определения переменных, которые стоят в сравнении.

сообщение об ошибке понятно или перевести?
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: ARM. Кросскомпиляция.

Сообщение Strijar » 12 апр 2011, 13:43

jacuba писал(а):eXosip.c: In function `_eXosip_transaction_init':
eXosip.c:76: error: `osip_srv_record_t' undeclared (first use in this function)
eXosip.c:76: error: (Each undeclared identifier is reported only once
eXosip.c:76: error: for each function it appears in.)
eXosip.c:76: error: parse error before "record"


Не находит описание структуры - скорей всего нет нужного хидера. Интуичу - что-то связанное с SIP. Почитайте INSTALL там обычно пишут какие зависимости у софта.
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: ARM. Кросскомпиляция.

Сообщение jacuba » 12 апр 2011, 15:05

Вот "это" появляется у меня на экране.
Код: Выделить всё
...
/bin/bash ../libtool --tag=CC   --mode=compile arm-linux-gcc -DHAVE_CONFIG_H -I. -I.. -I../include/   -D_REENTRANT  -I..   -g -O2 -Wall -Werror   -DORTP_INET6 -MT b64.lo -MD -MP -MF .deps/b64.Tpo -c -o b64.lo b64.c
libtool: compile:  arm-linux-gcc -DHAVE_CONFIG_H -I. -I.. -I../include/ -D_REENTRANT -I.. -g -O2 -Wall -Werror -DORTP_INET6 -MT b64.lo -MD -MP -MF .deps/b64.Tpo -c b64.c  -fPIC -DPIC -o .libs/b64.o
b64.c: In function `b64_encode_':
b64.c:209: warning: comparison is always true due to limited range of data type
b64.c:210: warning: comparison is always true due to limited range of data type
b64.c:211: warning: comparison is always true due to limited range of data type
b64.c:212: warning: comparison is always true due to limited range of data type
make[5]: *** [b64.lo] Ошибка 1
make[5]: Leaving directory `/root/arm1/linphone-3.4.3/oRTP/src'
make[4]: *** [all-recursive] Ошибка 1
make[4]: Leaving directory `/root/arm1/linphone-3.4.3/oRTP/src'
make[3]: *** [all-recursive] Ошибка 1
make[3]: Leaving directory `/root/arm1/linphone-3.4.3/oRTP'
make[2]: *** [all] Ошибка 2
make[2]: Leaving directory `/root/arm1/linphone-3.4.3/oRTP'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/root/arm1/linphone-3.4.3'
make: *** [all] Ошибка 2


...определения переменных, которые стоят в сравнении

Пожалуйста, поясните, какие именно переменные.

Strijar, спасибо за последнее сообщение, эту проблему я уже решил - был неправильно указан путь к хидерам.
Очень надеюсь на вашу помощь, уважаемые.

Добавлено спустя 34 минуты 36 секунд:
Я открыл файл b64.c и закоментировал строки 209-212.
Данная проблема решилась.

Спасибо всем.
jacuba
 
Сообщения: 11
Зарегистрирован: 05 апр 2011, 09:03

Re: ARM. Кросскомпиляция.

Сообщение boez » 12 апр 2011, 16:02

Strijar писал(а):Здесь нет ошибки - вы ее отрезали. Предупреждения не критичны.

Нет. В данном случае критичны. Ибо -Werror.
Но удалять строки - это не метод, оно конечно может соберется, но совсем не обязательно будет работать. Надо разобраться. Суть ошибки - идет какое-то сравнение, которое из-за формата чисел всегда истинно (например i>=0, где i типа unsigned int). Советую посмотреть в исходники что там за ошибка, безобидно это или являет собой проблему.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: ARM. Кросскомпиляция.

Сообщение Strijar » 12 апр 2011, 23:19

boez писал(а):Нет. В данном случае критичны. Ибо -Werror.


Видал я параноиков (да и сам такой) - но что-б до такой степени! ;)
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: ARM. Кросскомпиляция.

Сообщение jacuba » 13 апр 2011, 13:37

Задам еще вопрос.
Компилирую linphone, получаю ошибку:
Код: Выделить всё
...
make  all-am
make[5]: Entering directory `/home/user/linphone-34/linphone-3.4.3/mediastreamer2/src'
  CC     mscommon.lo
  CC     msfilter.lo
msfilter.c: In function `get_cur_time_ns':
msfilter.c:257: error: `CLOCK_MONOTONIC' undeclared (first use in this function)
msfilter.c:257: error: (Each undeclared identifier is reported only once
msfilter.c:257: error: for each function it appears in.)
make[5]: *** [msfilter.lo] Ошибка 1
make[5]: Leaving directory `/home/user/linphone-34/linphone-3.4.3/mediastreamer2/src'
make[4]: *** [all] Ошибка 2
make[4]: Leaving directory `/home/user/linphone-34/linphone-3.4.3/mediastreamer2/src'
make[3]: *** [all-recursive] Ошибка 1
make[3]: Leaving directory `/home/user/linphone-34/linphone-3.4.3/mediastreamer2'
make[2]: *** [all] Ошибка 2
make[2]: Leaving directory `/home/user/linphone-34/linphone-3.4.3/mediastreamer2'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/home/user/linphone-34/linphone-3.4.3'
make: *** [all] Ошибка 2


предполагаю, что если закоментировать и эти строки, то ошибка пропадет:) но это плохое решение. От чего возникают подобные ошибки?

Добавлено спустя 2 часа 2 минуты 40 секунд:
в поисках решения забрел на один китайский блог
Google Chrome помог мне перевести страницу, и если я правильно понял, то там советуют закоментировать ветку else в условии, но там говорится про файл msticker.с а у меня msfilter.c, но мне то же помогло. Прошу поправить, если я понял не правильно.

не нравится мне эти операции с удалением строк из кода.
В общем ошибка пропала и появилась следующая, не помню точно содержание, но что-то про неопределенные SPEEX_PREPROCESS_GET_PSD_SIZE и SPEEX_PREPROCESS_GET_PSD. В этом же блоге было и решение - достаточно было добавить в файл mediastreamer2/src/msconf.c строки
Код: Выделить всё
#define SPEEX_PREPROCESS_GET_PSD_SIZE 34
#define SPEEX_PREPROCESS_GET_PSD 35


Эти ошибки больше не возникают, появляются другие, но пока все решается.

Первый раз в жизни столкнулся с кросс-компиляцией и сразу же такой геморой. Кросс-компиляция всегда так тяжело проходит или мой случай исключительный?

Добавлено спустя 2 часа 50 минут 16 секунд:
не долго я радовался.
Код: Выделить всё
CXXLD  libmediastreamer.la
/usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: cannot find -lspeexdsp
collect2: ld returned 1 exit status
make[5]: *** [libmediastreamer.la] Ошибка 1
make[5]: Leaving directory `/home/user/linphone-34/linphone-3.4.3/mediastreamer2/src'
make[4]: *** [all] Ошибка 2
make[4]: Leaving directory `/home/user/linphone-34/linphone-3.4.3/mediastreamer2/src'
make[3]: *** [all-recursive] Ошибка 1
make[3]: Leaving directory `/home/user/linphone-34/linphone-3.4.3/mediastreamer2'
make[2]: *** [all] Ошибка 2
make[2]: Leaving directory `/home/user/linphone-34/linphone-3.4.3/mediastreamer2'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/home/user/linphone-34/linphone-3.4.3'
make: *** [all] Ошибка 2


Конфигурирую следующим образом:
Код: Выделить всё
./configure --prefix=/armbuild --host=arm-linux --with-gnu-ld --disable-static --disable-glib
--with-osip=$ARM_INSTALL_TREE/usr
--with-readline=$ARM_INSTALL_TREE/usr
SPEEX_CFLAGS="I$ARM_INSTALL_TREE/usr/include"
SPEEX_LIBS="-L$ARM_INSTALL_TREE/usr/lib -lspeex"
--disable-video --disable-nls --enable-gtk_ui=no --disable-glib --enable-alsa=no

я уже ничего не понимаю - откуда, почему и как? Прошу помощи.
jacuba
 
Сообщения: 11
Зарегистрирован: 05 апр 2011, 09:03

След.

Вернуться в ARM

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5