Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.196.171] |
|
Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
\usr\lib\lib.so.6 - есть по сути дела текстовый файл, в простейшем случае содержащий
Цитата GROUP ( /lib/libc.so.6 ) то бишь, подставляемый на сим-линк - на главную libс-такойто-то-там-версии-so.6 хотя возможно подключить в виде статики "libc-x-x-x-.a" (получив тем самым большую автономность и независимость приложения, как впрочем и большой размер файла). Добавлено Короче - Логика линковщика (для линукс!) такова - что он при компиляции может использовать как сим линк (либо импорт будет завязан на конкретную версию!) на бинарные ELF-файлы , так и статический *.a (ARCH - архив, с его предкомпилеными, обьектными файлами). |
Сообщ.
#17
,
|
|
|
Цитата N0P @ \usr\lib\lib.so.6 - есть по сути дела текстовый файл, в простейшем случае содержащий \usr\lib\libc.so такто текстовый файл а \lib\libс.so.6 библа Агде искать этот specs файл? Кстати пробовал просто скомпилить с параметром -c. потом попробовал слинковать ld'шкой.. с ошибкой но както получилось сделать исполняемый но не рабочий файл, заглянув в него всеравно увидел libc.so.6 значит это у линковщика по умолчанию идет? |
Сообщ.
#18
,
|
|
|
Вообще, у компилятора и линковщика со стандартной библиотекой довольно тесные связи. Просто так заменить libc не получится. Лучше почитай документацию uclibc или newlib — там может быть описано, как собрать gcc с не libc.
|
Сообщ.
#19
,
|
|
|
Может все легко делаеться.. может я просто не так обьяснил...
Я хотел бы увидеть при ldd myprograms вот так: libc.so => /lib/libc.so (0x00002af766e5a000) /lib64/ld-linux-x86-64.so.2 (0x00002af766c3c000) или это впринципе вс таже задача и есть... |
Сообщ.
#20
,
|
|
|
вообщем это снова я.. и тема эта до сих пор не понятна для меня.
Сегодня я приведу другой , более видный пример. Вообщем создл я программку, которая использует функции из библиотеки xlib. Соответствено и скомпилировал я её так: сс test.c -o test.out -lX11 как вы видите я передал ему параметр -lX11 чтоб он скомпоновал (не сам естественно) эту библиотеку. все нормально скомпелировалось, создался исполняемый. Давайте посмотрим на него вот так: ldd test.out и вот что мы увидим: libX11.so.6 => /usr/lib/libX11.so.6 (0x00002b7c54441000) libc.so.6 => /lib/libc.so.6 (0x00002b7c54752000) libXau.so.6 => /usr/lib/libXau.so.6 (0x00002b7c54aad000) libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00002b7c54caf000) libdl.so.2 => /lib/libdl.so.2 (0x00002b7c54eb5000) /lib64/ld-linux-x86-64.so.2 (0x00002b7c54223000) Как я понял -lX11 это не одна библиотека? Где это прописано у GCC и СС... Помогите пожалуйста эту загадку решить.. |
Сообщ.
#21
,
|
|
|
Цитата Aleman @ Как я понял -lX11 это не одна библиотека? Одна библиотека. Но у libX11.so.6 есть зависимости. $ ldd /usr/lib/libX11.so.6 linux-vdso.so.1 => (0x00007fffec3fd000) libXau.so.6 => /usr/lib/libXau.so.6 (0x00002b85beb5f000) libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00002b85bec62000) libdl.so.2 => /lib/libdl.so.2 (0x00002b85bed68000) libc.so.6 => /lib/libc.so.6 (0x00002b85bee6c000) /lib64/ld-linux-x86-64.so.2 (0x0000555555554000) Цитата Aleman @ Где это прописано Наверное, прописано в ELF-заголовках в /usr/lib/libX11.so.6 Добавлено Еще для примера: $ less /usr/lib/libX11.so.6 ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: DYN (Shared object file) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x20850 Start of program headers: 64 (bytes into file) Start of section headers: 1087728 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 7 Size of section headers: 64 (bytes) Number of section headers: 26 Section header string table index: 25 Dynamic section at offset 0x104b50 contains 25 entries: Tag Type Name/Value 0x0000000000000001 (NEEDED) Shared library: [libXau.so.6] 0x0000000000000001 (NEEDED) Shared library: [libXdmcp.so.6] 0x0000000000000001 (NEEDED) Shared library: [libdl.so.2] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] 0x000000000000000e (SONAME) Library soname: [libX11.so.6] 0x000000000000000c (INIT) 0x1df30 0x000000000000000d (FINI) 0xa9028 0x0000000000000004 (HASH) 0x1c8 0x000000006ffffef5 (GNU_HASH) 0x2760 … |
Сообщ.
#22
,
|
|
|
Цитата mo3r @ Одна библиотека. Но у libX11.so.6 есть зависимости. Точно! Цитата mo3r @ Наверное, прописано в ELF-заголовках в /usr/lib/libX11.so.6 Да так оно и есть... но вернемся к самому началу этапа. Я ему сказал -lX11 он в заголовок моей проги загнал libX11.so.6. вот это меня больше тревожит. где эти соответствия у него написаны, что -lX11 = libX11.so.6 |
Сообщ.
#23
,
|
|
|
Может все дело в том, что libX11.so - ссылка на конкретную библиотеку?
|
Сообщ.
#24
,
|
|
|
Цитата gruy @ Может все дело в том, что libX11.so - ссылка на конкретную библиотеку? Ему без разницы.. он бы и ссылку запихал. |
Сообщ.
#25
,
|
|
|
.6 — это версия ABI (вроде бы)
|
Сообщ.
#26
,
|
|
|
Что такое ABI?
|
Сообщ.
#27
,
|
|
|
http://en.wikipedia.org/wiki/Application_binary_interface
|
Сообщ.
#28
,
|
|
|
За аби просвятился, если это так:
Цитата mo3r @ .6 — это версия ABI (вроде бы) Где в Линуксе её прячут? Эту версию? Просто для эксперемента посмотрю. |
Сообщ.
#29
,
|
|
|
Цитата Aleman @ Где в Линуксе её прячут? Эту версию? Просто для эксперемента посмотрю. На этом мои знания заканчиваются Мне кажется, самое простое объяснение — линковщик прописывает то, на что указывает ссылка в момент линковки. |
Сообщ.
#30
,
|
|
|
Цитата mo3r @ На этом мои знания заканчиваются плохо |