Загружать несколько экземпляров разделяемой библиотеки, которая имеет внутренние переменные и вызовы dlopen - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть код GFORTRAN, который должен загрузить несколько экземпляров одной общей библиотеки ( .so ) в другой путь к папке.Эта общая библиотека находится в PASCAL и содержит открытые переменные и вызовы dlopen (с использованием функции LoadLibrary) для загрузки внешних .so .

. В моем коде GFORTRAN я пробовал RTLD_LAZY=1 и RTLD_NOW=2 в dlopen.Он загружает .so , но я подозреваю, что переменные являются общими (если я запускаю каждый экземпляр в каждом потоке, используя openMP, я могу видеть, что значения, которые я установил для переменной в потоке 1, перезаписываютсяв теме 2).

В качестве альтернативы я попытался dlmopen с LM_ID_BASE, основываясь на вопросе , но с той же проблемой при совместном использовании переменных.Когда я попробовал LM_ID_BASE для первого экземпляра и LM_ID_NEWLM для второго экземпляра, я получил symbol lookup error: /home/selva/libclusol.so: undefined symbol: memset, version GLIBC_2.2.5

Любое предложение?

Примечание: My .so создается с использованием FPC и имеет много открытых переменных, loadlibrary вызовов (внутренне использует dlopen) и несколько экспортированных функций, которые я использую вGFORTRAN

...