URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4975
[ Назад ]

Исходное сообщение
"Библиотека для загрузки динамических модулей"

Отправлено Brick , 24-Дек-05 23:53 
Доброе время суток!

Подскажите, пожалуйста, можно-ли использовать DL библиотеку (для создания динаически загружаемых модулей) с g++?

Сразу скажу, что у меня такая конструкция не работала...


Содержание

Сообщения в этом обсуждении
"Библиотека для загрузки динамических модулей"
Отправлено DeadMustdie , 24-Дек-05 23:59 
>Подскажите, пожалуйста, можно-ли использовать DL библиотеку (для создания
>динаически загружаемых модулей) с g++?
>
>Сразу скажу, что у меня такая конструкция не работала...

А что, собственно, помешало? При компиляции объектников для библиотеки
используется флаг '-fPIC', при линковке самой библиотеки - флаг '-shared',
а дальше dlopen() + dlsym().


"Библиотека для загрузки динамических модулей"
Отправлено Brick , 25-Дек-05 14:05 
Я так всё и делаю. Вопрос немного не в том состоял. Всй работает, когда модуль написан на С и компилируется gcc, если писать на С++ и компилировать g++, dlopen() и dlsym()проходят без проблемм, а при вызове загруженной функции из модуля выдетает в корку.


"Библиотека для загрузки динамических модулей"
Отправлено sandy , 25-Дек-05 14:46 
>Я так всё и делаю. Вопрос немного не в том состоял. Всй
>работает, когда модуль написан на С и компилируется gcc, если писать
>на С++ и компилировать g++, dlopen() и dlsym()проходят без проблемм, а
>при вызове загруженной функции из модуля выдетает в корку.

Если пишете на С++ надо указать extern "C"


"Библиотека для загрузки динамических модулей"
Отправлено Brick , 25-Дек-05 18:15 
Спасибо! Так всё заработало!

"Библиотека для загрузки динамических модулей"
Отправлено sandy , 27-Дек-05 11:59 
>Спасибо! Так всё заработало!

Где-то читал, что С++ свойственно подменять имя функции. С - такого не делает. Потому extern "C" должен эту проблему решать


"Библиотека для загрузки динамических модулей"
Отправлено DeadMustdie , 27-Дек-05 16:49 
>Где-то читал, что С++ свойственно подменять имя функции. С - такого не
>делает. Потому extern "C" должен эту проблему решать

Мнда, оказывается C++-компилятор - мастер-фальшивоимённик.
Весьма интересная интерпретация name mangling...