Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> плагин 
V
    Опции темы
fry
Дата 7.12.2009, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: нет
Всего: 3



Всем привет. 

Вопрос такой: пришлось писать плагины (.so) под Linux, язык С++, и возникло несколько проблем:
1. При компиляции имя функции изменяется, видимо для отслеживания атрибутов и другой информации самим GCC. Я не против, но как сделать так, чтобы при вызове dlsym можно указывать исходное имя. В целом, можно и подсмотреть какое оно в библиотеке и прописать его в коде, но равильно ли так поступать или есть еще какие варианты? "Выкрутился" прописав "extern "C"", но не знаю на сколько это корректно.
2. Как проверить то, что найденная функция действительно та, что ожидается приложением, т.е. соответствует хотябы количество и типы передаваемых и получаемого значений? Ведь если этого не сделать, то использование библиотеки становится потенциально опасным.
3. Если использовать данные в библиотеке, то эти данные будут разделяться между приложениями или создаваться заново при каждом ее подключении? Или лучше вообще избавляться от таких данных?

Заранее спасибо.
PM MAIL   Вверх
djamshud
Дата 7.12.2009, 02:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



1. Этот выкрутас - правильное решение.
2. ИМХО никак.
3. Будут создаваться.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
MAKCim
Дата 7.12.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(fry @  7.12.2009,  02:42 Найти цитируемый пост)
Ведь если этого не сделать, то использование библиотеки становится потенциально опасным.

если кто-то не следует спецификации при написании плагина, то приложение в этом не виновато ;)
по сабжу, извраты для реализации такого поведения не стоят того

Цитата(fry @  7.12.2009,  02:42 Найти цитируемый пост)
3. Если использовать данные в библиотеке, то эти данные будут разделяться между приложениями или создаваться заново при каждом ее подключении? Или лучше вообще избавляться от таких данных?

глобальные да
по возможности лучше сократить их использование, чтобы лишний раз потом не заморачиваться с синхронизацией
правильное решение - создавать все объекты по требованию приложения, т. е. приложение вызывает ряд API функций => создаются объекты => функции либы используются для работы с ними => в конце вызывается функция их освобождения


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
fry
Дата 7.12.2009, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: нет
Всего: 3



Спасибо за информационную поддержку.  smile  Думаю на этом усе.
PM MAIL   Вверх
xvr
Дата 7.12.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(fry @ 7.12.2009,  02:42)
1. При компиляции имя функции изменяется, видимо для отслеживания атрибутов и другой информации самим GCC.  есть еще какие варианты? 

Написать extern "C"
Цитата

2. Как проверить то, что найденная функция действительно та, что ожидается приложением, т.е. соответствует хотябы количество и типы передаваемых значений?
Не писать  extern "C"
 smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0606 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.