Использование libtool для загрузки дублированного имени функции из общей библиотеки

я пытаюсь создатьотладки» разделяемая библиотека (т.е. файл .so или .dll), которая вызывает другую 'реальный» разделяемая библиотека, которая имеет тот же C API, что и библиотека отладки (в данном случае для эмуляции API PKCS # 11). Однако я'Я сталкиваюсь с проблемой, когда карта ссылок библиотеки отладки сталкивается с картой реальной библиотеки и заставляет библиотеку отладки вызывать свои собственные функции вместо соответствующих функций в реальной библиотеке. Я нашел решение этой проблемы с помощью команды POSIX dlmopen, но хотел бы понять, возможно ли то же самое с помощью GNU 's libtool.

В моей системе Solaris 10 следующий код не проходит утверждение, когда тестовое приложение статически связывается с библиотекой отладки:

#include 
int MyFunctionName() {
  int (*function_ptr)();
  void *handle = dlopen("realsharedlibrary.so", RTDL_LAZY);
  *(void **)(&function_ptr) = dlsym(handle, "MyFunctionName");
  ASSERT(function_ptr != MyFunctionName); // Fails
  return (*function_ptr)();
}

В этом случае я получаю указатель на функциюMyFunctionName» (в библиотеке отладки) вместо MyFunctionName в реальной общей библиотеке.

мы обнаружили, что этоможно обойти эту проблему с помощью команды 'dlmopen» вместо 'dlopen»и сообщаем dlmopen о создании новой карты ссылок (сLM_ID_NEWLM параметр) при загрузке реальной библиотеки:

int MyFunctionName() {
  int (*function_ptr)();
  void *handle = dlmopen(LM_ID_NEWLM, "realsharedlibrary.so", RTDL_LAZY);
  *(void **)(&function_ptr) = dlsym(handle, "MyFunctionName");
  ASSERT(function_ptr != MyFunctionName); // succeeds
  return function_ptr(); // call real function
}

К сожалению, dlmopen, похоже, не включен в libtool (т.е. я неувидеть функцию lt_dlmopen в libtool).

Можно ли сделать то же самое, используя команды libtool, то есть создать новую карту ссылок при загрузке новой библиотеки, чтобы она нене сталкиваются с картой ссылок библиотеки отладки?

Ответы на вопрос(1)

Ваш ответ на вопрос