если я загружаю модуль с помощью dlopen
и вызываю его функцию
можно ли из этой функции добраться до данных родительского процесса?
Эта функция вызывается в адресном пространстве РОДИТЕЛЬСКОГО процесса. Иначе говоря getpid() до ее вызова и внутри новой функции должны иметь одинаковое значение. Должны также работать все соглашения С/++ для вызова extern-объявленных функций.
>Эта функция вызывается в адресном пространстве РОДИТЕЛЬСКОГО процесса. Иначе говоря getpid() до
>ее вызова и внутри новой функции должны иметь одинаковое значение. Должны
>также работать все соглашения С/++ для вызова extern-объявленных функций.это я понимаю что должны
но как мне так модуль сделать что бы все символы разресолвились?
в mod.c объявляю extern int b;
int b; в main.c объявлено
делаю:
gcc -o main main.c
gcc -nostartfiles -shared -o mod.so mod.c
>Эта функция вызывается в адресном пространстве РОДИТЕЛЬСКОГО процесса. Иначе говоря 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"
Надо описать int "выше" всех остальных функций, но в области их видимости. Хотя я уже лет пять не пользуюсь extern'ами - после ++ геморно это, да и плохо, когда что-то доступно всем. Описываем структуру/класс с нужными данными и передаем указатель на ее, уже инициализированный, экземпляр, как параметр вызова функции. Задача остается только не прибить ее (не освободить память под ней) внутри вызванной функции.
Ну ясное дело что я в самом начале описываю переменные :)
ошибку то мне не компилятор выдаёт а вызов dlopen самого
Не догоняю я как тут разресолвить символы внешние..
то что ссылку просто передавать можно это ясно всё, так и собирался делать
но для меня удобнее было бы через extern сделать
а то так устанеш ссылки на функции из main засылать в модуль, так как мне надо что бы модуль из мэйна функции юзал :)
ключ -export-dynamic помог dlopen разресолвить всё %)
пасиба :)