Возможный дубликат:
Динамическая общая библиотека C ++ в Linux
Я пишу общий объект, скажем, libtest.so, который имеет класс и функцию. У меня есть другая программа с именем «Program.cpp», из которой я хочу вызвать класс и его функцию, присутствующую в файле libtest.so. Я не знаю, как поступить. Пожалуйста помоги.
Спасибо
С уважением
Махеш
Динамически нужно звонить dlsym
чтобы получить адрес
функции, а затем вызвать его через указатель. Синтаксис этого
немного сложно, так как dlsym
возвращает void*
и нет конверсии
между void*
и указатель на функцию. (Некоторые компиляторы позволяют это,
хотя формально, в до C ++ 11, он требовал диагностики, как и C
стандарт.) Решение, рекомендованное в стандарте Posix:
int (*fptr)( int );
*(void**)(&fptr) = dlsym( handle, "function_name" );
Это предполагает, что указатели на функции имеют одинаковый размер и формат
в качестве указателей на данные — не гарантируется стандартами C или C ++, но
гарантировано Posix.
Других решений пока нет …