В репозитории arm* и x86* добавлен пакет gcc. В mipsel фид решено не добавлять gcc (слишком слабое железо).
Пакет gcc имеет статус бета в Openwrt, поэтому и в Entware у него аналогичный статус. Имеются некоторые ограничения использования gcc. Т.к. в пакете (пакетах) нет статических библиотек возможна только динамическая линковка, статической линковки нет.
Пакет был проверен на НАС QNAP TS-231+ (armv7), на других архитектурах не проверялся.
Существует ряд подводных камней при использовании gcc в Entware, они рассмотрены в следующих сообщениях.
На мой взгляд гораздо проще и надежнее собирать бинарники и пакеты на linux компьютере, это просто - https://github.com/Entware-ng/Entware-n ... om-sources
Нативная компиляция в Entware-ng (gcc в Entware)
-
- Администратор
- Сообщения: 1911
- Зарегистрирован: 09 авг 2015, 15:33
Итак начнем.
0. Установим gcc
1. В Entware нет *dev пакетов (как у наследника Openwrt). Обычные пакеты в отличии от Optware не содержат include файлы и статические библиотеки. Я заархивировал __ВСЕ__ include файлы в один tar.gz архив и выложил его. Если воспользоваться include файлами из архива, то configure скрипты могут определить наличие библиотек, которые еще не были установлены в Entware!
Скачаем и распакуем архив с include файлами. Для armv7 это делается командой
Замените amv7 на (armv5,x86-32,x86-64) если используете другой фид.
2. При сборке бинарников в Entware _обязательно_ использовать rpath=/opt/lib и нестандартный dynamic linker. При установке пакета gcc будет установлен скрипт /opt/bin/gcc_env.sh упрощающий задание обпций сборки. Для armv7 он такой
Для установки переменных окружения gcc выполните
или используйте флаги сборки в ручном режиме - примерно так:
0. Установим gcc
Код: Выделить всё
opkg update
opkg install gcc
1. В Entware нет *dev пакетов (как у наследника Openwrt). Обычные пакеты в отличии от Optware не содержат include файлы и статические библиотеки. Я заархивировал __ВСЕ__ include файлы в один tar.gz архив и выложил его. Если воспользоваться include файлами из архива, то configure скрипты могут определить наличие библиотек, которые еще не были установлены в Entware!
Скачаем и распакуем архив с include файлами. Для armv7 это делается командой
Код: Выделить всё
wget -qO- http://entware.zyxmon.org/binaries/armv7/include/include.tar.gz | tar xvz -C /opt/include
Замените amv7 на (armv5,x86-32,x86-64) если используете другой фид.
2. При сборке бинарников в Entware _обязательно_ использовать rpath=/opt/lib и нестандартный dynamic linker. При установке пакета gcc будет установлен скрипт /opt/bin/gcc_env.sh упрощающий задание обпций сборки. Для armv7 он такой
Код: Выделить всё
#!/bin/sh
export LDFLAGS="-Wl,-rpath=/opt/lib -Wl,--dynamic-linker=/opt/lib/ld-linux.so.3 -L/opt/lib"
export CFLAGS="-O2 -pipe -march=armv7-a -mtune=cortex-a9 -fno-caller-saves -mfloat-abi=soft "
Для установки переменных окружения gcc выполните
Код: Выделить всё
source /opt/bin/gcc_env.sh
или используйте флаги сборки в ручном режиме - примерно так:
Код: Выделить всё
gcc $CFLAGS $LDFLAGS helloworld.c -o helloworld
-
- Администратор
- Сообщения: 1911
- Зарегистрирован: 09 авг 2015, 15:33
Пред использованием gcc рекомендуем установить пакеты busybox, ldd, make, gawk, sed:
Продемонстрируем использование gcc для сборки бинарника htop.
Предположим, что исходники htop распакованы в текущей директории. Сначала "подсмотрим", как собирается htop в Entware - https://github.com/Entware-ng/entware-p ... p/Makefile
Кака видим, при сборке используется опция `--disable-unicode`, и мы станем ее использовать. Запустим выполнение скрипта configure:
Наиболее важная здесь опция `--prefix=/opt` - ее следует использовать всегда.
Теперь запустим make
После завершения работы в текущей директории появится бинарный исполняемый файл htop.
Проверим зависимости:
Все нормально - используются so библиотеки из /opt/lib и динамический загрузчик /opt/lib/ld-linux.so.3.
Можно запустить и проверить работу htop
Можно и установить htop
Код: Выделить всё
opkg install busybox ldd make gawk sed
Продемонстрируем использование gcc для сборки бинарника htop.
Предположим, что исходники htop распакованы в текущей директории. Сначала "подсмотрим", как собирается htop в Entware - https://github.com/Entware-ng/entware-p ... p/Makefile
Кака видим, при сборке используется опция `--disable-unicode`, и мы станем ее использовать. Запустим выполнение скрипта configure:
Код: Выделить всё
./configure --prefix=/opt --disable-unicode
Наиболее важная здесь опция `--prefix=/opt` - ее следует использовать всегда.
Теперь запустим make
Код: Выделить всё
make
После завершения работы в текущей директории появится бинарный исполняемый файл htop.
Проверим зависимости:
Код: Выделить всё
ldd ./htop
libncurses.so.6 => /opt/lib/libncurses.so.6 (0xb6eb3000)
libm.so.6 => /opt/lib/libm.so.6 (0xb6e12000)
libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0xb6dfe000)
libc.so.6 => /opt/lib/libc.so.6 (0xb6cc9000)
/opt/lib/ld-linux.so.3 (0xb6f01000)
Все нормально - используются so библиотеки из /opt/lib и динамический загрузчик /opt/lib/ld-linux.so.3.
Можно запустить и проверить работу htop
Код: Выделить всё
./htop
Можно и установить htop
Код: Выделить всё
make install
Вернуться в «Entware/Qnapware/Optware/Zyxware - обсуждаем репозитории пакетов»
Кто сейчас на конференции
Всего 0 посетителей :: 0 зарегистрированных, 0 скрытых и 0 гостей (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (162) здесь было 16 ноя 2019, 18:33
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей