DLSYM не использует символы, загруженные ручкой, но те, которые уже известны вместо [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 DLSYM не использует символы, загруженные ручкой, но те, которые уже известны вместо [закрыто]

Сообщение Anonymous »

У меня есть проект, написанный в C ++, который состоит из основного приложения, которое загружает несколько плагинов. Обзор проблемы заключается в следующем: < /p>
Плагины, которые являются общими объектами (.so), загрузка без какой -либо проблемы.
Но когда речь идет о явном связывании одного из плагинов в проекты плагина в Cmakelist Проблема, я пришел к вызову в dlsym () , который загружает символы после открытия библиотеки, то есть:

Код: Выделить всё

   void* handle = dlopen(path.c_str(), RTLD_LAZY);
if(handle != NULL)
{
MyPluginStructDetails* info = reinterpret_cast(dlsym(handle, "myExportSymbols"));
}

--more stuff---

}
Плагин A загружается нормально и создает символы, но при загрузке B он не жалуется, но в среде выполнения показывает, что B использует символы из A. Поэтому dlsym , не использует то, что мы загружаем в ручке . Я попытался заменить rltd_lazy by rltd_now , но это не помогает.
Есть идеи? Тема немного доходит до моего предела знаний в этой области, поэтому не стесняйтесь просить более точности, если это необходимо.

Подробнее здесь: https://stackoverflow.com/questions/797 ... wn-instead
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»