![]() |
|
Модераторы: xvr |
![]()
|
|
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: -1 Всего: -1 |
Имеем приложение, в котором определен класс Window. и в h (заголовки класса), и в cpp (реализация). Имеем библиотеку, которая собирается из cpp файла:
Потом этот файл нельзя открыть через dlopen. Если писать простейшие функции как в мануалах по dlopen, то все работает нормально. Может я чего-то не понимаю? Это сообщение отредактировал(а) Anton Vatchenko - 25.2.2011, 18:56 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
думаю, проблема в том, что библиотеке необходимы внешние методы работы с объектом windows. А в готовом приложении эти методы не экспортируются. Поэтому, чтобы проблему решить, необходимо сделать отдельную динамическую библиотеку для класса Window, которую следует цеплять и к программе, и к твоей динамической библиотеке.
|
|||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: -1 Всего: -1 |
А есть возможность все же как-то использовать функционал, который реализован в бинарнике? Ведь пишут плагины для приложений, а эти самые плагины как раз управляют основным приложением...
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Anton Vatchenko, а никто не мешает управлять приложением, когда используется общая внешняя библиотека.
|
|||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: -1 Всего: -1 |
То есть насколько я понял есть бинарник-пустышка, который грузит библиотеку, в которой весь функционал программы, а остальные библиотеки могут этот функционал использовать? Только как в библиотеке подгрузить общую библиотеку, если я даже не могу через dlopen ее открыть!?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Anton Vatchenko, ты хоть понимаешь, как работает dlopen()? Он mmap'ит файл библиотеки в адресное пространство процесса, разруливает зависимости и, если получилось, возвращает код успешного завершения. Но в твоем начальном случае ему не удается разрулить зависимости, так как необходимые символы находятся внутри исполняемого модуля и не экспортированы из него, поэтому он выдает ошибку (кстати, мог бы посмотреть текст ошибки).
Чтобы этого не было, все символы, общие для программы и плагинов должны быть в отдельной общей библиотеке. Как вариант, процесс сам передает плагину все адреса необходимых функция (именно функций, а не объектов классов!). |
|||
|
||||
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: -1 Всего: -1 |
Установил флаг -rdynamic и все помогло. Спасибо за помощь.
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |