[devel] Re: .a vs .so

Алексей Любимов =?iso-8859-1?q?avl_=CE=C1_l14=2Eru?=
Вс Янв 11 19:57:34 MSK 2004


Dmitry V. Levin пишет:

>On Sun, Jan 11, 2004 at 05:44:30PM +0300, Алексей Любимов wrote:
>  
>
>>>5. После обнаружения .la-файла, оригинальный (неправленный Альтом) libtool
>>>использует информацию из dependency_libs для рекурсивного разворачивания
>>>цепочки зависимостей библиотек до самого низа. При этом очевидно, что
>>>при некоторых условиях возможна ситуация, когда одновременно линкеру
>>>передаются две версии одной и той же библиотеки (н-р, libdb4.x :-)).
>>>
>>>      
>>>
>>Вопрос
>>а если в системе стоят только  libdb4.0 и libdb4.1, libdb4.1-devel (со 
>>статиком)
>>будет подхвачена libdb4.0?
>>    
>>
>
>Во время сборки или во время запуска?
>
1 момент. - Во время сборки.
При отсутствии -devel, разве может программа прилинковаться к библиотеке.


>
>Если программа A была собрана с библиотекой L и с libdb4.1, а библиотека L
>- с библиотекой libdb4.0, то во время запуска программы A в памяти
>окажется и libdb4.0, и libdb4.1, и последствия этого будут ужасны.
>  
>

То, что  вся цепочка слинкованных программ должна быть связана с одной 
версией libdb4.1 естественно.
Но проблема то поднималась другая. Лишние связи, когда при сборке 
программ могут быть подсунуты случайные версии и даже вперемешку. Разве 
не так?

Рекурсивно разворачивать во время сборки все связи и завершать сборку 
при конфликте версий через другие линкуемые библиотеки имхо совсем 
другая задача. не так?

>  
>
>>>Это, как справедливо отметил Дмитрий Левин, чревато всякими "Ужасными
>>>Последствиями" для базы rpm, в частности.
>>>
>>>      
>>>
>>А bte зачем делали?
>>    
>>
>
>О чём это вы?  BTE - это миф.
>Если программа A из предыдущего примера не используется во время сборки
>других пакетов, то выявить её неработоспособность путём пересборки Сизифа
>не удастся.
>  
>
Это совсем из другой оперы. Предлагается то курочить aclocal, то есть 
влиять исключительно на процесс сборки. А какой тогда в этом смысл, если 
программа в сборке просто не участвует?

>>>7.2. Во-вторых, вне зависимости от характера линковки, нам, строго говоря,
>>>_необходима_ информация, записанная в  dependency_libs. Необходимость
>>>этой информации обусловлена [достаточно гипотетической, впрочем]
>>>возможностью наличия в зависимостях статической библиотеки без
>>>соответствующего динамического аналога (я припоминаю, что, вроде, то ли
>>>libkrb, то ли libsocks [некогда] распространялся в таком вот виде). Плюс
>>>всякие third-party, но это уже их головная боль, наверное.
>>>
>>>      
>>>
>>другими словами, даже деление на devel и devel-static с последующей 
>>неустановкой *-static для  сборки программы с динамической линковкой в 
>>общем случае некорректно?
>>    
>>
>
>В том случае, о котором идёт речь в 7.2, некорректно.
>Правда, у нас в Сизифе таких всего 2:
>glibc-devel (libc_nonshared.a и *crt*.o) и gcc (*crt*.o).
>И надеюсь, что не будет.
>
>  
>
>>>7.3. Во-третьих, кроме dependency libs, содержимое .la-файла (конкретно,
>>>имя библиотеки) используется libtool'ом для обеспечения корректной работы
>>>с ltdl-модулями (см. autobook)
>>>
>>>      
>>>
>>Предыдущее предположение и здесь в силе?
>>    
>>
>
>Нет.  Во время динамической загрузки можно нормально загрузить только
>динамические модули.
>  
>

Я так понял, что если на этапе сборки не были доступны *.la, то во время 
запуска программы хоть эти *la и не участвуют, но проблемы заложенные 
недостатком информации при сборке остаются.

>  
>
>>>8. Предложено (Дмитрием же) альтернативное решение для проблемы из п. 5.
>>>libtool подправлен таким образом, чтобы при динамической сборке на линуксе
>>>список dependency_libs не раскрывался вовсе (при статической все 
>>>по-прежнему).
>>>Это решение, впрочем, не закрывает проблему 7.2, но, по крайней мере,
>>>вроде бы, решает все остальные.
>>>
>>>      
>>>
>>А почему нельзя на этапе сборки просто ограничить выбор пакетов 
>>правильными зависимостями в спеке? Разве это не ограничит выбор 
>>dependency_libs?
>>    
>>
>
>Вы предлагаете ликвидировать find-requires и перейти на указание
>зависимостей собранных пакетов вручную?
>  
>
Ни разу. Просто в спецслучаях указывать из нескольких альтенатив 
(libdb4.x) конкретную и пересобирая в bte обеспечить отсутствие конкурентов.
По моему их не так уж и много. Кроме libdb4 и libpng разве что нибудь есть?






Подробная информация о списке рассылки Devel