ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА














     АРХИВ :: Apache-Talk
Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-talk] Re[2]: [apache-rus] loading dso module



In <2682.000318@webclub.ru> Alexey V. Meledin (avm@webclub.ru) wrote:
AM> День добрый,
AM>     Khimenko!

AM> Saturday, March 18, 2000, 1:49:38 PM,  Вы написали:

KV>> In <13428.000317@webclub.ru> Alexey V. Meledin (avm@webclub.ru) wrote:
AM>>> День добрый!

AM>>>    Возникло пару небольших вопросов и возможно немного не в тему, за
AM>>>    что прошу извинить.
AM>>>    1. Cижу на FreeBSD 3.3. с Apache 1.3.12 rus скомпиленом с поддержкой
AM>>>    dso и мне требуется подгрузить линуксовый dso модуль.
AM>>>    linux_enable имею установленным, соответственно при помощи brandelf
AM>>>    могу пускать линуксовые бинарники.
AM>>>    Может быть кто знает - существует ли разница между простым запуском
AM>>>    "чужого" бинарника и подгрузкой dso модуля.
AM>>>    Т.е. распространиться ли эмуляция на .so модуль?
KV>> Нет.
AM> Почему?, если не сложно объяснить.

Господи. А если подумать ? Вот у тебя в программе есть, скажем, функции
fopen и fprintf. То есть есть, разумеется, только вызовы -- сами-то функции
живут в соответствующей динамической библиотеке. Так оно и во freebsd и в
linux'е и вообще во всех современных *nix'ах. Но (в отличие от Windows)
в выполняемом файле формата ELF НЕТ названия библиотеки в которой должны
находиться эти функции ! Соотвественно при попытке использовать два DSO
в одной программе, которые ссылаются на РАЗНЫЕ библиотеки с этими функциями
(в данном случае имеются в виду libc из freebsd и glibc) происходит "короткое
замыкание". И даже если его не происходит (в glibc 2.1 есть специальные
средства против этого), то все равно получаем кашу. Структуры FILE из
freebsd'ной libc и из glibc несовместимы между собой, так что если в одном
месте вызывается fopen из libc, а в другом fprintf из glibc, то ничего, кроме
"bus error" получиться не может. Собственно это простой факт: если в программе
смешиваются разные версии одной и той же библиотеки, то гибрид нежизнеспособен
(конечно если обе библиотеки реально используются). Это касается не только
libjpeg или Berkeley DB, но и вообще любых библиотек. В частности libc/glibc.

AM>>>    Пока словил грабли в виде "Bus error" и core.

KV>> Естественно. Две совершенно различные libc'шные библиотеки -- чего ты ждал 
?

AM> linc-ная библиотека у меня лежит для линуха и именно та, что надо
AM> libc.6.so и именно там где надо лежит.
AM> Вопрос только в том - она ли подключается или не она на тек. момент.

*И*Д*И*О*Т*. У тебя сам freebsd'ный apache в вакууме существует или где ?
Откуда он функцию printf берет ? Из linux'овой glibc ? Сильно сомневаюсь...



=============================================================================
=               Apache-Talk@lists.lexa.ru mailing list                      =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
=       Archive avaliable at http://www.lexa.ru/apache-talk                 =



 




Copyright © Lexa Software, 1996-2009.