Ага. А там лежат несколько версий одной и той же библиотеки и линкер впадает в ступор перед проблемой выбора. Да память не резиновая вроде как...Сообщение от elf/2
Спасибо, буду искатьСообщение от maximk
Ага. А там лежат несколько версий одной и той же библиотеки и линкер впадает в ступор перед проблемой выбора. Да память не резиновая вроде как...Сообщение от elf/2
Спасибо, буду искатьСообщение от maximk
Все гипотетические примеры очень хорошие.Сообщение от elf/2
Ну что тут сказать?
У каждого подхода есть недостатки.
С одной стороны, если целостность не контролируется - получается DLL hell. Если есть контроль версий - получаем несовместимость потенциально совместимого кода.
Контроль по сигнатурам - это некоторое промежуточное решение. И наследует достоинства и недостатки обоих подходов. Если это иметь ввиду, то подход весьма практичен.
Самое главное в списке - то что из него можно так или иначе получить указатели на функции плагинов и вызывать их.Сообщение от elf/2
Можно искать файлы по маске, загрузить их, и добавить в список. Но они могут не влезть в память.
Ещё можно вообразить пользователя с одним дисководом. У него есть дискета с графическим редактором и плагинами. Он запускает редактор и автоматически загружаются плагины которые он настроил. Но все плагины не помещаются на дискету, и иногда он загружает плагины, которые хранятся на другой дискете. А ещё у него есть дискеты с его картинками. Не получится просто искать файлы в каталоге по маске.![]()
А чего искать, читай, думаю будет полезно.Сообщение от Vitamin
блин, dll hell к целосности отношение имеет слабое. проблема в том что в свое время MS рекомендовала складывать все dll в папочку %windir%\system. при установке двух программ использующих одну библиотеку разных версий побеждала последняя. инсталятор мог проверить только дату/время изменения файла.Сообщение от captain cobalt
для борьбы с этим добавили version_info, чтобы опять же инсталятор мог грамотно сообщить пользователю что происходит и положить библиотеку в папку к программе откуда она будет грузиться в первую очередь
для того чтобы hell'а не было достаточно иметь возможность хранить несколько версий библиотеки на одной машине. это работает в linux и .net
а вы так не делайтеСообщение от Vitamin
кстати наличие реестра с общим списком всех библиотек в системе от всего этого не спасает
точно, но вот только где в таком случае будет лежать "реестр"? и как он поможет разрешить проблемуСообщение от captain cobalt
Последний раз редактировалось elf/2; 17.10.2006 в 14:56.
тогда просто ради коллекции ссылка на описание формата obj файлов от MS OMF (relocatable object module format):Сообщение от caro
http://www2.cs.uh.edu/~mirkovic/cosc2410/omf1_1.pdf
Чтобы использовать перегруженные функции, нужно руками прописывать сигнатуры в клиентском коде.Сообщение от Vitamin
Утилита, делающая из исходников исходники - это компилятор. Лучше сразу обучить её делать объектные файлы. Тогда "старые ассемблеры" можно отбросить.Сообщение от Vitamin
Можно ли на спеке позволить себе держать разные версии библиотеки в памяти? Скорее всего нет.Сообщение от elf/2
Поэтому и важно, что если совместимость достаточна - библиотека компонуется. Недостаточна - проблема должна обнаруживаться.
Каждая библиотека должна быть одна.
Пока не ясно.Сообщение от elf/2
Он может лежать на "системном диске", и после загрузки постоянно сидеть в памяти.
Или же каждый кусок может лежать рядом со своей программой в "файле конфигурации".
Есть ещё один способ хранить несколько версий библиотек на одной машине.Сообщение от elf/2
Компоновать программы статически.
тоже подкину пару ссылок:Сообщение от elf/2
Последний раз редактировалось captain cobalt; 17.10.2006 в 15:31.
Вполне можно так делать. Коренным образом поменялась библиотека- меняется имя/версия и она не прилинкуется "куда не надо". А реестр- это бред.Сообщение от elf/2
А чтобы использовать ассемблер надо вообще программы писать ручками! Прикинь, да?Сообщение от captain cobalt
Ну-ну. Никто не выказывал охоты перейти на существующий аласм, зато как только на горизонте нарисуется эфемерный компилятор, так все сразу побегут роняя тапки пользовать его и писать в нем програмы. Уж лучше использовать что есть.Сообщение от captain cobalt
не в памяти, а на диске. соответсвенно когда задаем зависимости от библиотек указываем не только имя но и версию. и компоновщик грузит в память только нужную версиюСообщение от captain cobalt
"Можно ли на спеке позволить себе держать ... в памяти?"Сообщение от captain cobalt
нужное вставить
точно, и добавить в каждую программу парсер конфигурашек... "Можно ли на спеке позволить себе держать ... в памяти?"Сообщение от captain cobalt
вот и я о том. у библиотеки должна быть версия, а не у функции сигнатура. в библиотеке лежат связанные между собой функции и библиотека определяется набором функций.Сообщение от Vitamin
и линковка должна проходить/отваливаться на основе требований программы к версии библиотеки.
при этом не важно как мы эти библиотеки находим. насколько мне известно подход к поиску библиотек у винды/линукса различается, но:
1. можно указать руками где искать при запуске (LD_LIBRARY_PATH)
2. место специфичное для данной программы (каталог где лежит бинарик)
3. общая куча (%windir%\system)
как сейчас модно писать: +1Сообщение от Vitamin
Я тоже было подумал, что черная кошка пробежала дважды, но ты меня опередил %)Сообщение от elf/2
Единственное что полезное вытащил из идей captain cobalt'а- это версионирование на уровне функций, а не модулей целиком. Но это только если будет возможность раздербанивать библиотеки, вытаскивая нужные функции. В противном случае это не имеет смысла.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)