На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> Логика линковщика , Не могу понять
    \usr\lib\lib.so.6 - есть по сути дела текстовый файл, в простейшем случае содержащий
    Цитата

    GROUP ( /lib/libc.so.6 )

    то бишь, подставляемый на сим-линк - на главную libс-такойто-то-там-версии-so.6 хотя возможно подключить в виде статики "libc-x-x-x-.a" (получив тем самым большую автономность и независимость приложения, как впрочем и большой размер файла).

    Добавлено
    Короче - Логика линковщика (для линукс!) такова - что он при компиляции может использовать как сим линк (либо импорт будет завязан на конкретную версию!) на бинарные ELF-файлы , так и статический *.a (ARCH - архив, с его предкомпилеными, обьектными файлами).
      Цитата N0P @
      \usr\lib\lib.so.6 - есть по сути дела текстовый файл, в простейшем случае содержащий


      \usr\lib\libc.so такто текстовый файл а \lib\libс.so.6 библа

      Агде искать этот specs файл?

      Кстати пробовал просто скомпилить с параметром -c. потом попробовал слинковать ld'шкой.. с ошибкой но както получилось сделать исполняемый но не рабочий файл, заглянув в него всеравно увидел libc.so.6 значит это у линковщика по умолчанию идет?
        Вообще, у компилятора и линковщика со стандартной библиотекой довольно тесные связи. Просто так заменить libc не получится. Лучше почитай документацию uclibc или newlib — там может быть описано, как собрать gcc с не libc.
          Может все легко делаеться.. может я просто не так обьяснил...

          Я хотел бы увидеть при ldd myprograms вот так:

          ExpandedWrap disabled
            libc.so => /lib/libc.so (0x00002af766e5a000)
            /lib64/ld-linux-x86-64.so.2 (0x00002af766c3c000)


          или это впринципе вс таже задача и есть...
            вообщем это снова я.. и тема эта до сих пор не понятна для меня.
            Сегодня я приведу другой , более видный пример.

            Вообщем создл я программку, которая использует функции из библиотеки xlib.
            Соответствено и скомпилировал я её так:
            ExpandedWrap disabled
              сс test.c -o test.out -lX11


            как вы видите я передал ему параметр -lX11 чтоб он скомпоновал (не сам естественно) эту библиотеку.

            все нормально скомпелировалось, создался исполняемый.
            Давайте посмотрим на него вот так:
            ExpandedWrap disabled
               ldd test.out

            и вот что мы увидим:
            ExpandedWrap disabled
               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 и СС...

            Помогите пожалуйста эту загадку решить..
            Сообщение отредактировано: Aleman -
              Цитата Aleman @
              Как я понял -lX11 это не одна библиотека?

              Одна библиотека. Но у libX11.so.6 есть зависимости.
              ExpandedWrap disabled
                $ 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

              Добавлено
              Еще для примера:
              ExpandedWrap disabled
                $ 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
                Цитата mo3r @
                Одна библиотека. Но у libX11.so.6 есть зависимости.

                Точно!

                Цитата mo3r @
                Наверное, прописано в ELF-заголовках в /usr/lib/libX11.so.6

                Да так оно и есть...

                но вернемся к самому началу этапа. Я ему сказал -lX11 он в заголовок моей проги загнал libX11.so.6. вот это меня больше тревожит.
                где эти соответствия у него написаны, что -lX11 = libX11.so.6
                  Может все дело в том, что libX11.so - ссылка на конкретную библиотеку?
                    Цитата gruy @
                    Может все дело в том, что libX11.so - ссылка на конкретную библиотеку?


                    Ему без разницы.. он бы и ссылку запихал.
                      .6 — это версия ABI (вроде бы)
                        Что такое ABI?
                          http://en.wikipedia.org/wiki/Application_binary_interface
                            За аби просвятился, если это так:

                            Цитата mo3r @
                            .6 — это версия ABI (вроде бы)


                            Где в Линуксе её прячут? Эту версию? Просто для эксперемента посмотрю.
                              Цитата Aleman @
                              Где в Линуксе её прячут? Эту версию? Просто для эксперемента посмотрю.

                              На этом мои знания заканчиваются :) Мне кажется, самое простое объяснение — линковщик прописывает то, на что указывает ссылка в момент линковки.
                                Цитата mo3r @

                                На этом мои знания заканчиваются

                                плохо :(
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0405 ]   [ 15 queries used ]   [ Generated: 19.05.24, 04:04 GMT ]