Как я могу получить статический компилятор C?

8

Я играю со средами chroot и хотел бы иметь переносной компилятор C, чтобы я мог легко настроить некоторые базовые инструменты сборки в каждой среде, не перемещая слишком много библиотек.

Gcc кажется довольно ненормальным из-за того, что я хочу сделать, но если довольно просто создать статический gcc, я бы не возражал против нескольких десятков мегабайт.

Я также смотрю на Tiny C Compiler, который меньше, но все же выглядит так, будто у него впечатляющий набор функций. Тем не менее, запуск ./configure --help в директории с исходным кодом не показывает никакой опции для статического построения tcc, и я не уверен, как это можно сделать иначе.

math4tots
источник
Чтобы ответить вам на второстепенную проблему - использование памяти, вот несколько решений: вы можете создавать теневые каталоги, которые содержат только жесткие ссылки на GCC; Вы можете использовать Docker-контейнеры (контейнеры более безопасны, чем chroot, а Docker предоставляет объединенную файловую систему, которая позволит вам сэкономить память).
Ctrl-Alt-Delor

Ответы:

1

Сборка статического двоичного файла должна быть такой же простой, как и запуск gcc с -static, или, если вызывается ld, используйте -Bstatic. Пытаться

CFLAGS=-static make

после бега configure. Если это не удастся, результаты будут очевидны, например, множество неопределенных ссылок во время ссылки.

Кайл Джонс
источник
1
Я попробовал make CFLAGS=-staticтолько сейчас. Сделайте распечатки с предупреждением о том dlopen, что когда я пытаюсь запустить исполняемый файл в среде chroot, я получаю /usr/lib/crt1.o .. crti,o .. crtn.oне найденные ошибки. Это то, что вы имели в виду под «неопределенными ссылками во время ссылки»?
math4tots
Ошибки, которые я ожидал, были вызваны отсутствием статических версий библиотек, таких как crt1.o, но компоновщик сразу же пожаловался. Если вы видите ошибки во время выполнения, то двоичный файл не был статически связан.
Кайл Джонс
Я думаю, вы неправильно поняли вопрос: math4tots хочет компилятор C, который работает как отдельный двоичный файл (или, по крайней мере, как легко идентифицируемый набор файлов), а не как компилятор C, который создает автономные двоичные файлы.
Жиль "ТАК - перестань быть злым"
1
Да, я понимаю это. Создание статически связанного компилятора является необходимым первым шагом, о котором, похоже, задается вопрос.
Кайл Джонс
1
@Gilles Лучший способ получить компилятор C в виде отдельного двоичного файла - это построить его из исходного кода, используя уже имеющийся компилятор.
OrangeDog
3

Вы также можете получить предварительно скомпилированную версию с помощью static-get

static-get -x gcc
Хавьер Лопес
источник