загрузить динамическую библиотеку несколько раз в несколько независимых областей - PullRequest
1 голос
/ 31 августа 2011

Я хочу динамически загружать библиотеку несколько раз в независимые области, чтобы каждый экземпляр имел свою собственную память.Это возможно?

Я думаю, не в переносном смысле.Возможно ли это с dlopen и друзьями в POSIX / Unix / Linux?Или, по крайней мере, я забочусь о MacOSX для моего конкретного случая прямо сейчас (поэтому он может понадобиться мне позже и в других системах).


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

Дополнительные сведения: это библиотека readline.Добавление поддержки многопоточности в принципе означало бы переписать все это.

1 Ответ

1 голос
/ 03 сентября 2011

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

Зависит от того, что вы подразумеваете под «собственной памятью». Очевидно, что с потоками POSIX вся память является общей, поэтому экземпляр библиотеки не может иметь «свою собственную память».

То, что вы, вероятно, имели в виду, так это «чтобы каждый экземпляр имел свою собственную копию глобальных переменных», ответ на который да: см. dlmopen (3) документы . Вы захотите передать ему LM_ID_NEWLM.

Осторожно : это только Linux и Solaris, и GDB ничего не знает о библиотеках, загруженных в пространство компоновщика не по умолчанию, поэтому проблемы с отладкой в ​​настоящее время очень трудны

...