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

Исходное сообщение
"данные вызывающей программы при использовании dlopen"

Отправлено Art , 26-Июл-02 21:32 
если я загружаю модуль с помощью dlopen
и вызываю его функцию
можно ли из этой функции добраться до данных родительского процесса?

Содержание

Сообщения в этом обсуждении
"RE: данные вызывающей программы при использовании dlopen"
Отправлено Арлекин , 28-Июл-02 09:38 
Эта функция вызывается в адресном пространстве РОДИТЕЛЬСКОГО процесса. Иначе говоря getpid() до ее вызова и внутри новой функции должны иметь одинаковое значение. Должны также работать все соглашения С/++ для вызова extern-объявленных функций.

"RE: данные вызывающей программы при использовании dlopen"
Отправлено Art , 28-Июл-02 13:59 
>Эта функция вызывается в адресном пространстве РОДИТЕЛЬСКОГО процесса. Иначе говоря getpid() до
>ее вызова и внутри новой функции должны иметь одинаковое значение. Должны
>также работать все соглашения С/++ для вызова extern-объявленных функций.

это я понимаю что должны
но как мне так модуль сделать что бы все символы разресолвились?
в mod.c объявляю extern int b;
int b; в main.c объявлено
делаю:
gcc -o main main.c
gcc -nostartfiles -shared -o mod.so mod.c


"RE: данные вызывающей программы при использовании dlopen"
Отправлено Art , 28-Июл-02 14:00 
>Эта функция вызывается в адресном пространстве РОДИТЕЛЬСКОГО процесса. Иначе говоря getpid() до
>ее вызова и внутри новой функции должны иметь одинаковое значение. Должны
>также работать все соглашения С/++ для вызова extern-объявленных функций.

это я понимаю что должны
но как мне так модуль сделать что бы все символы разресолвились?
в mod.c объявляю extern int b;
int b; в main.c объявлено
делаю:
gcc -o main main.c
gcc -nostartfiles -shared -o mod.so mod.c
и получается при dlopen Error: mod.so: Undefined symbol "b"


"RE: данные вызывающей программы при использовании dlopen"
Отправлено Арлекин , 28-Июл-02 14:25 
Надо описать int "выше" всех остальных функций, но в области их видимости. Хотя я уже лет пять не пользуюсь extern'ами - после ++ геморно это, да и плохо, когда что-то доступно всем. Описываем структуру/класс с нужными данными и передаем указатель на ее, уже инициализированный, экземпляр, как параметр вызова функции. Задача остается только не прибить ее (не освободить память под ней) внутри вызванной функции.

"RE: данные вызывающей программы при использовании dlopen"
Отправлено Art , 28-Июл-02 14:40 
Ну ясное дело что я в самом начале описываю переменные :)
ошибку то мне не компилятор выдаёт а вызов dlopen самого
Не догоняю я как тут разресолвить символы внешние..
то что ссылку просто передавать можно это ясно всё, так и собирался делать
но для меня удобнее было бы через extern сделать
а то так устанеш ссылки на функции из main засылать в модуль, так как мне надо что бы модуль из мэйна функции юзал :)

"RE: данные вызывающей программы при использовании dlopen"
Отправлено Art , 28-Июл-02 15:32 
ключ -export-dynamic помог dlopen разресолвить всё %)
пасиба :)