Как добиться версионности символов - PullRequest
4 голосов
/ 16 февраля 2011

Я хочу добиться чего-то вроде следующего:

У меня есть несколько версий библиотеки.Я динамически загружаю последнюю версию библиотеки, используя dlopen ().Затем я хочу посмотреть, существует ли в этой версии определенная функция ( вместе с аналогичным типом возврата и списком аргументов ).Если он откроется, откройте его еще раз, чтобы проверить то же самое.

Я видел некоторые сообщения о "сценариях версий", но не могу его использовать.Также я думаю, что поиск в таблице символов не будет решением, так как он проверяет только имя функции там.

1 Ответ

6 голосов
/ 18 февраля 2011

Хорошее объяснение версий символов здесь .Вам нужна функция dlvsym () из расширения GNU для поиска символа по имени и версии:

#define _GNU_SOURCE
#include <dlfcn.h>
void *dlvsym(void *handle, char *symbol, char *version);

Функция dlvsym () выполняет те же функции, что и dlsym (), но принимаетСтрока версии в качестве дополнительного аргумента. Примечание: Имена символов C ++ должны передаваться в dlvsym () в искаженной форме , содержащей список аргументов.К сожалению, искаженное имя GCC (в отличие от MSVC) не содержит тип возвращаемого значения.

Для получения дополнительной информации см. "dlopen (3) - man-страница Linux" .

...