LINUX.ORG.RU

как написать и собрать программу на C++ без зависимости libc


0

0

интересует что-то типа минимальной программы для UNIX

к примеру компилирую такую программу

primer.c:

void main(void){}

gcc -o primer.out primer.c

получается довольно большой файл у которого зависимость от libc.so.6 (посмотрел через objdump)

> gcc -o primer.out primer.c

gcc -static -o primer.out primer.c

> получается довольно большой файл


strip на него.

Deleted
()
Ответ на: комментарий от Deleted

А если размер получаемого статического бинарника очень важен - смотри в сторону uclibc, klibc и других подобных "лёгких" реализаций libc.

Deleted
()

Причем тут С++ не понятно. Ваш пример явно на C и требует С-шную библиотеку. А так нужно создать программу, содержающию функцию _start(), тогда ей не нужен будет libc. А бинарник создавать как то так:

gcc -Wall -o linux.o -c linux.c
ld -s -o linux linux.o


http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html

mky ★★★★★
()
Ответ на: комментарий от tailgunner

>> смотри в сторону uclibc, klibc и других подобных "лёгких" реализаций libc.

>Они обычно не поддерживают Си++

Под MSVC++ этого можно было добиться через ATL_MIN_CRT. Как сейчас-не знаю.

Absurd ★★★
()
Ответ на: комментарий от Absurd

>>> смотри в сторону uclibc, klibc и других подобных "лёгких" реализаций libc.

>> Они обычно не поддерживают Си++

> Под MSVC++

Извини мое любопытство, но каким образом MSVC++ относится к сборке "минимальной программы для UNIX"?

tailgunner ★★★★★
()

извините для меня нет разницы C++ или C, к сожалению не разбираюсь в тонкостях. :) Хотелось бы как в Visual C++ указываеш точку входа, и нет никакой зависимости crt и всякой другой ненужности пользуешся функциями спокойно из разных dll стандартных но тут не проходит указывать точку входа, все равно цепляется за libc тут подсказали компилировать с параметрами -nodefaultlibs -nostartfiles вроде как сработало

спасибо за ссылку http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html , то что искал, но не мог найти

megapup
() автор топика
Ответ на: комментарий от tailgunner

>>> Они обычно не поддерживают Си++

>> Под MSVC++

>Извини мое любопытство, но каким образом MSVC++ относится к сборке "минимальной программы для UNIX"?

Насколько я помню там одна из реализаций C++ stdlib была завязана на libc только в ::operator new() и ::operator delete(). Возможно если автор задастся такой целью то сможет это дело перенести на гыцацу.

Absurd ★★★
()

Вроде как если особым флагом линкера каждую функцию в свою секцию(или как это называется) поместить и потом задать особый флаг то в бинарь попадут тока те секции что реально используются используется. Поищи в гугле на эту тему.

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

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.