Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамическая библиотека

22K
14 сентября 2009 года
Pastor
43 / / 16.05.2007
Доброго всем времени суток. Пытаюсь поработать с плагинами в Линуксе... И столкнулся с такой проблемой(прикладываю исходники в аттаче).
Всего смысла этого творение не буду рассказывать, он очень глубоко зарыт . Но в общих чертах:
есть разные способы обработки некой конфигурационной информации, появилась мысль реализовать это все посредством модулей и грузить все это динамически. Почитал разную литературу на эту тему и оно родилось - oiAdapter(для динамической загрузки), oiLoader(для загрузки скопом с директории), oiModel(некий интерфейс, пока не реализованный), /models/oiModelTemplate(примерный модуль). Все это дело весело компилится и собирается, но при работе происходят чудеса. Во вывод первоначальный(test1):
 
Код:
>Load module.
>Libarary: ./models/libModelTemplate.so[0x09a1f130], load success.
>Unload module.
>debug. handle: 0x09a1f130, symbol: modelName
>Error get symbol "modelName": >��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷: undefined symbol: >modelName
>debug. handle: 0x09a1f130, symbol: modelVersion
>Error get symbol "modelVersion": 8�� ��� ��� ��� >��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷��� ��� ��޷��޷��޷��޷��޷��޷��޷��޷��޷��޷: >undefined symbol: modelVersion


Поставил флаги на загрузку и выгрузку модуля. И происходит, модуль загружается, отладочная инфа говорит что модуль удачно загружен, потом модуль каким-то волшебным образом системой выгружается и дальше естественно не могу нихрена получить, да еще к томуже dlerror выплевывает кракозябры. Если в dlopen убрать флаг RTLD_GLOBAL, то все к чертям валится (скорее всего из-за того, что система почему-то сразу выгружает библиотеку и адрес уже не действительный).
Вывод nm:
Код:
lerdeb:/home/pastor/Desktop/settings/models# nm libModelTemplate.so
00001b38 d DW.ref.__gxx_personality_v0
00001a18 a _DYNAMIC
00001b10 a _GLOBAL_OFFSET_TABLE_
         w _Jv_RegisterClasses
00001b60 b _ZL8instance
00001b64 b _ZL9parametrs
00001b80 b _ZZ12modelVersionE7version
         U _ZdlPv@@GLIBCXX_3.4
00001a04 d __CTOR_END__
000019fc d __CTOR_LIST__
00001a10 d __DTOR_END__
00001a08 d __DTOR_LIST__
000009f8 r __FRAME_END__
00001a14 d __JCR_END__
00001a14 d __JCR_LIST__
00001b3c A __bss_start
         w __cxa_finalize@@GLIBC_2.1.3
00000850 t __do_global_ctors_aux
000005f0 t __do_global_dtors_aux
00001b34 d __dso_handle
         w __gmon_start__
         U __gxx_personality_v0@@CXXABI_1.3
000006a7 t __i686.get_pc_thunk.bx
00000846 t __i686.get_pc_thunk.cx
00001b3c A _edata
00001c80 A _end
00000888 T _fini
00000550 T _init
00001b40 b completed.5706
00001b44 b dtor_idx.5708
0000072d T fini
00000670 t frame_dummy
         U fwrite@@GLIBC_2.0
000006eb T init
         U memcpy@@GLIBC_2.0
0000079f T modelConfigure
000006c2 T modelInstance
000006ac T modelName
000007ec T modelVersion
         U sprintf@@GLIBC_2.0
         U stdout@@GLIBC_2.0

Вывод ldd:
 
Код:
lerdeb:/home/pastor/Desktop/settings/models# ldd libModelTemplate.so
 linux-gate.so.1 =>  (0xb7efb000)
 libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7df7000)
 libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7dd1000)
 libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7dc3000)
 libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7c68000)
 /lib/ld-linux.so.2 (0xb7efc000)


Созданный мной для проверки testModelTemplate отрабатывает хорошо. Да, если я oiAdapter скармливаю например libm.so, то все хорошо работает, это говорит что все кроме состряпанной библиотеки работает.

Ломаю голову уже какой день, перечитал кучу манов и всяких статей, но почему-то у Всех все шоколадно, а у меня (как обычно) все через задний проход. Не посоветуете, что может быть не так, в чем я мог наколоться?
260
14 сентября 2009 года
Ramon
1.1K / / 16.08.2003
Конструктор копирования и естественно оператор присваивания.
22K
14 сентября 2009 года
Pastor
43 / / 16.05.2007
Спс за ответ... :)
причиной было именно это, поэтому пришлось использовать указатели.
:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог