Ошибка error: undefined reference to 'main' при первой попытке собрать программу на смартфоне почти всегда означает одно: компилятор C для Android установлен, но проект не сохранён в файл с расширением .c либо запускается через обёртку, которая не передаёт исходник в GCC или Clang. Проверьте, что файл действительно создан, а команда сборки указывает на него полным именем — это решает большинство стартовых проблем ещё до изучения настроек.
Смартфон давно перестал быть устройством только для чтения кода. Полноценная цепочка «редактор — компилятор — запуск» работает и в мобильной среде: можно писать учебные программы, готовиться к экзамену, проверять алгоритмы в дороге. Дальше разберём, какие инструменты реально доступны, чем они отличаются и как избежать типичных ошибок при настройке.
Какие компиляторы C доступны на Android
На Android существует два принципиально разных подхода. Первый — автономные IDE из магазина приложений: всё ставится одним пакетом, есть редактор с подсветкой, кнопка запуска и встроенные библиотеки. Второй — терминальные среды, где вы вручную устанавливаете пакеты и работаете как на обычном Linux-десктопе.
К первой группе относятся Cxxdroid, C4droid, CppDroid — они подходят новичкам, потому что не требуют знания командной строки. Ко второй — Termux с пакетами clang или gcc, а также среды вроде UserLAnd, разворачивающие полноценный дистрибутив Linux.
- 📱 Cxxdroid — IDE с офлайн-компилятором, поддержкой C и C++, примерами программ
- 🛠 C4droid — классический компилятор с плагином GCC, поддержкой SDL и Qt
- 💻 Termux — терминал с пакетным менеджером и актуальными версиями Clang
- 📚 CppDroid — среда с обучающими примерами и автодополнением кода
Сравнение популярных решений
Выбор зависит от задачи: учебные программы на стандартной библиотеке потянет любой вариант, а вот работа с файлами, сетью или графикой уже требует смотреть на возможности конкретной среды. Ниже — сравнение по ключевым критериям без привязки к конкретным версиям, так как они регулярно обновляются.
| Инструмент | Компилятор | Работа офлайн | Подходит новичку |
|---|---|---|---|
| Cxxdroid | встроенный (GCC/Clang) | да | да |
| C4droid | GCC-плагин | да | частично |
| CppDroid | встроенный | да | да |
| Termux | Clang / GCC из пакетов | после установки пакетов | нет, нужен опыт терминала |
Обратите внимание: возможности и набор библиотек у таких приложений отличаются от версии к версии. Перед покупкой платной версии проверьте в описании приложения или на странице разработчика, поддерживается ли нужный вам стандарт языка и нужные библиотеки.
Установка и первая программа в автономной IDE
Возьмём типовой сценарий для приложения-IDE. После установки из магазина откройте редактор, создайте новый файл и убедитесь, что он сохраняется с расширением .c, если пишете на чистом C, а не C++ — от этого зависит, какой фронтенд компилятора будет вызван.
Минимальная проверочная программа выглядит так:
#include <stdio.h>
int main(void) {
printf("Hello, Android!\n");
return 0;
}
Нажмите кнопку запуска (обычно это «Run» или значок воспроизведения). Если вместо вывода появляется ошибка компиляции — читайте первую строку сообщения: именно она указывает на файл и номер строки с проблемой. Ошибки вида expected ';' почти всегда означают пропущенную точку с запятой на строку выше указанной.
☑️ Проверка перед первым запуском
⚠️ Внимание: некоторые IDE сохраняют проект во внутреннем хранилище, недоступном другим приложениям. Если планируете переносить исходники на ПК, сразу проверьте, где физически лежат файлы и есть ли функция экспорта.
Компиляция через Termux: полный контроль
Termux превращает смартфон в окружение, близкое к настольному Linux. После установки приложения вам нужно обновить списки пакетов и поставить компилятор. Команды вводятся в терминале:
pkg update
pkg install clang
Далее создайте файл любым текстовым редактором (в самом Termux доступен nano, ставится командой pkg install nano) и скомпилируйте программу:
clang hello.c -o hello
./hello
Такой подход даёт доступ к актуальным версиям компилятора и стандартной библиотеки, а также к отладчику, системе сборки make и заголовочным файлам, которых может не быть в мобильных IDE. Расплата — необходимость понимать базовые команды терминала.
⚠️ Внимание: устанавливайте Termux только из источников, которые указывает сам проект (официальный репозиторий или рекомендованный магазин). Устаревшие сборки из сторонних источников могут не получать обновления пакетов, и команда pkg update будет завершаться с ошибками репозитория.
Типичные ошибки и их причины
Большинство проблем при компиляции на Android не связаны с самим компилятором — они возникают из-за особенностей мобильной платформы. Разберём самые частые сценарии.
- ❌ Permission denied при запуске бинарника — файл лежит в разделе, смонтированном без права исполнения (например, на SD-карте); перенесите проект во внутренний каталог приложения или домашнюю папку Termux
- ❌ Не находятся заголовки вида
stdio.h— не установлен или повреждён пакет с библиотеками; переустановите компилятор или плагин - ❌ Ошибки кодировки — исходник сохранён не в UTF-8; проверьте настройки редактора
- ❌ Программа не видит файлы — приложению не выдано разрешение на доступ к хранилищу в настройках Android
Отдельный случай — программы, использующие функции, специфичные для настольных ОС: прямой доступ к железу, некоторые системные вызовы, работа с потоками на низком уровне. Такой код может компилироваться, но вести себя иначе или завершаться с ошибкой, и это ограничение платформы, а не компилятора.
Ограничения мобильной сборки
Смартфон подходит для учебных проектов, алгоритмов, консольных утилит и разбора чужого кода. Но есть вещи, для которых мобильная цепочка сборки подходит плохо или не подходит вовсе.
Крупные проекты с сотнями файлов будут собираться заметно дольше, чем на ПК, а редактор без полноценной навигации по коду усложнит работу. Создание нативных приложений для самого Android — отдельная тема: для этого используется Android NDK и Android Studio на компьютере, а не мобильный компилятор. Также учитывайте, что графические библиотеки в мобильных IDE поддерживаются ограниченно — обычно через SDL-плагины, и их настройка отличается от десктопной.
Что такое кросс-компиляция и нужна ли она вам
Кросс-компиляция — это сборка программы на одном устройстве (например, ПК) для запуска на другом (смартфоне). Если ваша цель — писать именно на смартфоне, она не нужна: мобильные компиляторы собирают код прямо под процессор устройства. Кросс-компиляция актуальна, когда вы разрабатываете на ПК и хотите получить исполняемый файл для Android.
Как выбрать инструмент под свою задачу
Сформулируйте, что именно вы будете делать. Учебные программы по курсу программирования, задачи с олимпиад, проверка идей «на ходу» — для этого достаточно любой автономной IDE с подсветкой синтаксиса и мгновенным запуском.
Если же планируется серьёзная работа — сборка сторонних библиотек, использование make, отладка, контроль версий через git — без терминальной среды не обойтись. Возможна и гибридная схема: писать код в удобном редакторе, а компилировать через Termux, открыв в нём тот же файл.
Часто задаваемые вопросы
Можно ли компилировать C на Android без интернета?
Да. Автономные IDE вроде Cxxdroid или C4droid содержат компилятор внутри установочного пакета и работают офлайн. В Termux интернет нужен только для скачивания пакетов — после установки clang сборка выполняется локально.
Чем Clang отличается от GCC и что выбрать?
Оба компилятора поддерживают современные стандарты C. Clang обычно выдаёт более читаемые сообщения об ошибках, что удобно новичкам; GCC исторически распространён в учебных материалах. Для учебного кода разница практически незаметна — берите тот, что доступен в вашей среде.
Почему скомпилированная программа не запускается с SD-карты?
Разделы внешних накопителей в Android обычно смонтированы с запретом на исполнение файлов. Перенесите бинарник во внутреннее хранилище приложения или домашний каталог Termux и запускайте оттуда.
Подойдёт ли мобильный компилятор для создания приложений под Android?
Для полноценных приложений с графическим интерфейсом — нет. Их разрабатывают через Android Studio и NDK на компьютере. Мобильный компилятор предназначен для консольных программ, обучения и работы с алгоритмами.
Можно ли подключать сторонние библиотеки?
В Termux — да: многие библиотеки доступны через пакетный менеджер (например, pkg install с нужным пакетом), после чего заголовки подключаются обычным #include. В автономных IDE набор библиотек фиксирован разработчиком, и его нужно проверять в описании конкретного приложения.