Pracuję nad biblioteką współdzieloną przy użyciu C++ pod Linuksem i chciałbym, aby ta biblioteka używała log4cxx do celów rejestrowania. Jednak nie jestem pewien, jak to ustawić. Aby log4cxx działał, muszę utworzyć obiekt rejestratora. Jak mogę się upewnić, że ten obiekt zostanie utworzony po załadowaniu mojej biblioteki?Jak zainicjować bibliotekę współdzieloną pod Linuksem
Podejrzewam, że najłatwiej będzie utworzyć obiekt rejestratora jako zmienną globalną, a następnie użyć go z dowolnego pliku źródłowego mojej biblioteki, deklarując go jako zewnętrzny w nagłówkach. Ale w jaki sposób mogę utworzyć program rejestrujący automatycznie, gdy aplikacja połączy się z biblioteką?
Wiem, że w bibliotekach DLL dla systemu Windows jest coś takiego jak REASON_FOR_CALL == PROCESS_ATTACH; czy pod Linuksem jest coś podobnego?
Dotyczy to również bibliotek C. Istnieje również "__attribute __ ((destruktor))" dla funkcji, która ma zostać wywołana, gdy biblioteka jest rozładowywana –
... a ten atrybut nie ma nic wspólnego z konstrukcją obiektu? – einpoklum
@einpoklum, prawda, jest to w większości niezwiązane z budową obiektu. Możesz go użyć w C, który nie ma obiektów. To powiedziawszy, C++ używa tego wewnętrznie do wywoływania konstruktorów i destruktorów obiektów globalnych. –