LINUX.ORG.RU

Вопрос о динамической компоновке


0

0

Господа Линуксоиды, помогите пожалуйста.

Я пишу приграмму состоящую из исполняемого модуля и динамической библиотеки. Мне надо сделать так, чтобы при изменениях в библиотеке не надо было бы пересобирать исполняемый модуль. В основном я работаю под виндами и знаю, что там для этого надо вручную прописать в def файле номера функций.

Для линукса мне не удается найти документацию по этой теме.

Подскажите, может быть в линуксе такой проблемы вообще нет. А если есть, то как её решать. Или где можно почитать на эту тему.

Заранее благодарен за любую помощь.

anonymous

Re: Вопрос о динамической компоновке

man dlopen - возможно поможет ;)

tvn ()

Re: Вопрос о динамической компоновке

GNU binutils экспортируют в динамическую библиотеку все нестатические функции, ничего отдельно прописывать не надо. Управлять компиляцией библиотеки надо с использованием libtool (читать info libtool), а никак не руками. Ну а dlopen тут не при чём...

Antichrist ()

Re: Вопрос о динамической компоновке

Действительно правильно было бы ответить info libtool но вчера не дочитал вопрос... Надеюсь что dlopen тоже не помешает;))

tvn ()
Ответ на: Re: Вопрос о динамической компоновке от Antichrist

Re: Re: Вопрос о динамической компоновке

Большое спасибо, но я, видимо, совсем ничего не понимаю в линуксе. Или ответ настолько очевиден, что его в info libtool просто нет.

Поясню: если в виндах экспортирую из dll функции aFunc() и zFunc(), то компоновщик расставит их по алфавиту и пронумерует, так что aFunc() - 1, zFunc() - 2. При компоновке exe модуля используются именно номера, а не имена. Если потом я добавлю в dll функцию dFunc(), то компоновщик опять их перенумерует и получится aFunc() - 1, dFunc() - 2. zFunc() - 3. Если я теперь запущю старый exe, то там где вызывалась zFunc(), вызовется dFunc() и все грохнется. Чтобы этого не было надо составить def файл и прописать номера. А новые функции добавлять в конец.

Я не знаю и не могу найти используется ли подобная схема в линуксе. Может быть в линуксе вся компоновка и вызовы происходят только по именам? Тогда этой проблемы просто не существует.

Спасибо за внимание.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.