Mam wspólną bibliotekę załadowaną przy użyciu dlopen
(z flagami RTLD_NOW | RTLD_GLOBAL
). Jeśli biblioteka korzysta z funkcji z programu głównego, nie rozładowuje się. Kończę więc z tym samym kodem dla tej współużytkowanej biblioteki, nawet jeśli rozładowałem (używając dlclose
), zmieniono, skompilowałem, (ponownie) załadowałem.C++: dlclose nie rozładowuje biblioteki wspólnej
Moim celem jest przeładowanie tej samej biblioteki po wprowadzeniu w niej zmian, więc nie muszę ponownie uruchamiać całego programu, aby przetestować mój kod.
Używam g ++ 4.2.3, na Linux Ubuntu 10.04.
(red)
rozwiązany:
"załadowane biblioteki wykorzystuje symbol powodu RTLD_GLOBAL". Rzeczywiście, miałem symbole innego .a osadzone podczas łączenia, które zostały prawdopodobnie wywołane i uniemożliwiające zamknięcie mojej biblioteki ... Myślę, że można sprawdzić, czy lib jest rozładowywany za pomocą dlopen (..., RTLD_NOLOAD), aby sprawdzić biblioteka została poprawnie usunięta.
Czy zwalniasz uchwyt do biblioteki dll? – Felipe
Prawdopodobnie musisz być nieco bardziej konkretny na temat platformy (Linux?) I wersji, której używasz. To może mieć znaczenie dla tego rodzaju problemu. –
@Komyg: Używam dlclose (uchwyt), więc przypuszczam, że uchwyt jest zwolniony robiąc tak ... – Ben