значит между кросс-компиляцией и нормальной компиляцией имеются различия. прямо в роутере все отлично компиляется.
может, чтоб не мучить расскажите, как компилировать в роуторе
Очень просто.
ipkg install optware-devel
подождать, пока все 70 МБайт (или около того) девелоперского набора скачаются и установятся.
Затем распаковать содержимое архива с исходниками на винт.
Перейти в каталог с исходниками:
cd /tmp/harddisk/dbhub-0.441 (ну или где там у тебя каталог будет лежать)
затем сконфигурировать
./configure --prefix=/opt
затем скомпилировать:
make
или же
make install (чтобы скомпилированные бинарники и-что-там-еще сразу скопировались в нужные каталоги)
Все.
Кстати, а есть ли средство делать внутри роутера ipkg-шки? Имеется в виду уже что-то готовое, без опиливания рашпилем
Да вроде рашпиля не требуется. Сам я пока не пробовал, вот здесь вроде бы все понятно описано.
Т.е. один раз для контретного пакета все настроить, а потом только обновленные файлы по мере выхода новых версий подкидывать.
ДД,
мы сами не местные, в репозитории савсэм старая версия, не скомпилит ли
кто под наш роутер?
http://www.heyu.org/download/heyu-2.3.2.tgz
Заранее спасибо,
eugenem
Помогите скомпилить:
http://download.savannah.gnu.org/rel...e-2.1.1.tar.gz
с патчем:
http://download.devbase.at/voip/linphone-2.1.1.patch
и ещё вот это:
http://download.devbase.at/voip/yeaphone-0.1.5.tar.gz
для WL-500GP
ipk-пакет в аттаче
Всем привет!
Установил весь toolchain, собрал работающую прошивку, т.е. кросс-компиляция 100% работает.
Попробовал откомпилировать простенькую программку:
Вот так:Code:#include <stdio.h> int main(int argc, char **argv) { printf("Hello world!"); return 0; }
Получился ELF размером 15962 байта.Code:mipsel-linux-gcc -o hello hello.c
На x86 машине на которой компилировал ессно выдаёт:
Но и на раутере WL500gPV2 (поместил на флэшке, примонтированной в /opt прям в корень) выдаёт:Code:bash: ./hello: cannot execute binary file
Что я делаю не так?Code:-sh: ./hello: not found
Если я в своих Makefile'ах (другая программа - чуть посложнее hello world ) поставлю вместо "CC = g++" -> "CC = mipsel-linux-g++" - этого достаточно?
(компиляция проходит успешно, ELF получается, но на раутере почему-то не работает так же как и hello world)
И с этим разобрался!!!
Добавил при линковке ключ:
Но хотелось бы чтоб ELFники были поменьше...Code:-static
Что надо сделать, чтобы библиотеки использовать динамически и чтоб ELF их находил - кто знает?
Можно ещё компилировать без отладочной информации и с оптимизацией по размеру (в ущерб производительности видимо). Ключ компилятора -Os. У готового бинарника убрать отладочную информацию можно командой strip.
А бинарники вроде и так динамически собираются (сам же говоришь что без -static динамически собирались). Если тулчейн тот же, которым корневая фс собиралась, то делать ничего вроде бы и не надо, ну может быть прописать LD_LIBRARY_PATH=/lib:<путь к твоим библиотекам>.
А вообще при компиляции указываешь -L<путь к библиотеке> и -l<сама библиотека>. Например, если у тебя на компе в /opt/mips-lib/ лежит математическая библиотека libm.so, то указываешь mipsel-linux-gcc -L/opt/mips-lib -lm -o hello hello.c. Эту libm.so потом нужно ещё на роутер скопировать, если её там нету.
Насколько я понял, писать собственные программы для роутера можно только на С, ибо библиотека С++ для архитектуры mipsel находится в стадии альфа и не пригодна для использования. Не будет ли кто-нибудь так добр чтобы объяснить как скомпилировать собственную программу типа "Hello World" на С нативно на самом роутеру и с помощью тулчейна =)
P.S. Заранее спасибо за любую ценную информацию по теме...
P.S.2. Отвечая на свой вопрос:
Чтобы скомпилировать программу на "большом" компьютере для роутера надо установить тулчейн (не раз обсуждалось на форуме), потом найти в папочке /optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin компилятор mipsel-linux-g++ и с помощью него компилировать бинарные файлы, которые не хотят исполняться на PC, зато замечательно отрабатывают на роутере )
Last edited by featZima; 02-04-2009 at 23:06.