Михаил Юдин

Фикс ошибок компиляции библиотек в Termux

При компиляции библиотек или утилит порой возникают ошибки, связанные с несовместимостью опций компилятора или их недостаточностью для сборки.

Рабочее решение (проверено на sassc)

Компиляция успешна при использовании флага --disable-march-tune-native:

gem install sassc --version=2.2.1 -- --disable-march-tune-native

Благодарим @over

!!! Остальная часть статьи остаётся для ознакомления.

Внимание: этот метод не даёт возможность пользоваться результатами компиляции, даже при использовании -mcpu=native. Только для ознакомления. Следим за ситуацией: GitHub issue

Источник проблем

Когда собирал этот блог в среде Termux с использованием новой версии Jekyll 4.0, столкнулся с проблемой, что sassc не хочет компилироваться при помощи clang. Ошибка возникала следующая:

error: the clang compiler does not support '-march=native'

Оптимальный вариант конечно сделать issue на GitHub по этому вопросу и ждать у моря погоды, но есть способ быстрее устранить эту проблему.

Убираем опцию

Первый способ решить проблему, который пришёл в голову, — залезть в Makefile и убрать опцию. Но что делать, если компилировать придётся новые версии библиотек? Долго и муторно. Вторым решением представилось проксировать все вызовы clang через свой скрипт с обрезанием параметра march. Что собственно я и сделал. Создал файл ~/bin/clang:

#!/data/data/com.termux/files/usr/bin/env bash
~/../usr/bin/clang "${@/-march=native/}"

Конечно же нужно сделать файл исполняемым: chmod +x ~/bin/clang.

Подменяем используемый бинарник

Более-менее нормальный способ подмены — дописать в приоритетном порядке к переменной $PATH путь к папке bin в домашней директории. Создадим файл ~/../usr/etc/profile.d/set_path_home_bin.sh с содержанием:

export PATH=$HOME/bin:$PATH

После чего clang будет искаться сначала в ~/bin.

Этого оказалось недостаточно, пришлось ещё добавить симлинки для архитектурно специфичных clang:

cd ~/bin                              
ln -s clang aarch64-linux-android-clang
ln -s clang aarch64-linux-android-clang++

После чего перезапускаем сессию терминала и пробуем скомпилировать библиотеки снова.

Ещё почитать

Постоянный доступ к Termux через ssh тоннель

Постоянный доступ к Termux через ssh тоннель

Живая разработка в Epsilon Notes

Живая разработка в Epsilon Notes

Самые полезные приложения для Android

Самые полезные приложения для Android

Нет фото

Android shell scripting. Part 2.

Нет фото

Android shell scripting. Part 1.