libc.so.6 => /lib/libc.so.6 (0x00002b09231ff000)
/lib64/ld-linux-x86-64.so.2 (0x00002b0922dd1000)
Вот и озадачиваюсь вопросом. Кто говорит линковщику, где это у него настроено, что именно libc библиотеку нужно эту брать libc.so.6
Скорее всего - компилятор, который в системе GCC линковщик запускает и им управляет. Для си++ кода запуск компилятор д.б. под именем g++ - тогда линковщику указываются другие библиотеки и стартап модули. Попробуйте плюсовый хелловорлд собрать gcc - получите кучу ошибок линковки...
нужно же ему подключить библиотеки, в которых объявленные функции реализованы...
а libc.so всем С-программам нужна и уж подставлять вместо неё свою библиотеку - странная идея, может лучше сразу свой ЯП напишешь?
Непонятен вопрос. Свою либу подставить - или вместо стандартной си-либы что-то подпихнуть? Если первое - то показал, какие проблемы? Если второе - то какого извиняюсь? Но если оч надо - то достижимо наверняка... только придется поразбираться, каждый встречный не подскажет, потому как никому оно не надо.
вместо стандартной си-либы
Понятно что libc.so.6 ссылаеться на libc-2.3.6.so и что?
Ну так что именно вам надо, услышат наконец толком или где?
Обновить стандартную либу? кто мешает?
Подставить в систему вместо стдлиб невесть что?
Для компиляции одной программы заменить линковку с стдлиб на линковку с непойми чем? Что, документация совсем ничего не говорит про управление умолчательными линковками, стратапами и проч? Я как бы не проверял, мне без надобности. Слышал, что в MSVC какие-то маньяки, которым хотелось с чмстым выньапи работая согнать размер файла до нуля - выкидывали стандартную линковку и стартап, получали свою сишную прогу в 500 байт размером... Я не маньяк, я не пробовал.
мда... а я вот не хочу ссылаться.. мне интересно просто .. и никто не знает.. вот загадка линукса
В действительности, сложно понять, чего же это Вы хотите...
Например, если Вы не хотите, чтобы gcc линковала с libc и другими дефолтными библиотеками, запускайте компиляцию с опцией -nodefaultlibs
Вот так, например
aleman@aleman-desktop:/media/sdb5/test$ gcc hw.c -nodefaultlibs
/usr/lib/gcc/x86_64-linux-gnu/4.1.3/../../../../lib/crt1.o: In function `_start':
(.text+0x12): undefined reference to `__libc_csu_fini'
/usr/lib/gcc/x86_64-linux-gnu/4.1.3/../../../../lib/crt1.o: In function `_start':
(.text+0x19): undefined reference to `__libc_csu_init'
/usr/lib/gcc/x86_64-linux-gnu/4.1.3/../../../../lib/crt1.o: In function `_start':
(.text+0x25): undefined reference to `__libc_start_main'
/tmp/ccSfdUuE.o: In function `main':
hw.c:(.text+0xa): undefined reference to `puts'
collect2: выполнение ld завершилось с кодом возврата 1
aleman@aleman-desktop:/media/sdb5/test$ gcc hw.c -nodefaultlibs
/usr/lib/gcc/x86_64-linux-gnu/4.1.3/../../../../lib/crt1.o: In function `_start':
(.text+0x12): undefined reference to `__libc_csu_fini'
/usr/lib/gcc/x86_64-linux-gnu/4.1.3/../../../../lib/crt1.o: In function `_start':
(.text+0x19): undefined reference to `__libc_csu_init'
/usr/lib/gcc/x86_64-linux-gnu/4.1.3/../../../../lib/crt1.o: In function `_start':
(.text+0x25): undefined reference to `__libc_start_main'
/tmp/ccSfdUuE.o: In function `main':
hw.c:(.text+0xa): undefined reference to `puts'
collect2: выполнение ld завершилось с кодом возврата 1
Так это и должно получаться.
Опция отключает линковку со стандартными библиотеками, но Вы-то должны подставить свои библиотеки, в которых определены те же базисные функции. Совсем-то без библиотек скомпилировать не удастся.
aleman@aleman-desktop:/media/sdb5/test$ gcc hw.c -nodefaultlibs
/usr/lib/gcc/x86_64-linux-gnu/4.1.3/../../../../lib/crt1.o: In function `_start':
(.text+0x12): undefined reference to `__libc_csu_fini'
Это и есть процедуры стартапа/файнализации. Все то, что выполняется до входа в мэйн и после выхода из, а также exit, at exit, и проч. Реально точка входа в выполнимый файл не с мэйн же связывается, а со всей этой оберткой (которая отчасти вроде как библиотека, но реально скорее core C ).