Używam dlopen załadować biblioteki współdzielonej w czasie wykonywaniadlopen - niezdefiniowany błąd symbol
dlopen("SharedLibarary1.so", RTLD_NOW | RTLD_GLOBAL);
W tym obiektem udostępnionym odsyłam do const char * zdefiniowanej w innej udostępnionej biblioteki „SharedLibarary2.so”.
Plik wykonywalny i obie biblioteki są zbudowane przy użyciu -rdynamic.
Ale nadal otrzymuję błąd czasu wykonywania, gdy używam dlopen: "/usr/lib/SharedLibarary1.so: niezdefiniowany symbol" i wskazuje na zniekształcone znaki stałe * ma niezdefiniowany symbol.
Whith GDB "udział informacyjny" Widzę, że druga biblioteka nie jest załadowana w punkcie błędu.
Jak dotąd ten problem zniknie, jeśli zrobię dlopen w drugiej bibliotece, zanim zrobię to w pierwszej bibliotece.
Czy istnieje lepszy sposób wymuszenia na ładowarce załadowania drugiej biblioteki dla nierozwiązanego symbolu?
tak. Nie powoduj, że biblioteka, którą ładujesz, polega na czymś, co będzie połączone tylko z inną biblioteką, którą załadujesz za pomocą dlopen(). Użyj obiektu współdzielonego, który jest ładowany w standardowy sposób, który ma ten symbol. Czy przy użyciu RTLD_LAZY pomoc przy okazji? – CashCow