2011-07-15 40 views
6

Mam oprogramowanie, które najpierw ładuje .dylib pozwala wywołać libFirst.dylib za pomocą następującego polecenia:dlopen() Błąd obrazu Nie znaleziono

void* handle = dlopen(path.c_str(), RTLD_LAZY | RTLD_GLOBAL); 

Później wewnątrz funkcji z załadowanym libFirst.dylib próbuję załadować inną .dylib przy użyciu tego samego polecenia, ale dla libSecond.dylib, załadunek tej wspólnej biblioteki daje mi następujące ostrzeżenia w mojej konsoli Xcode:

error warning: Ignored unknown object module at 0x129310 with type 0x8a8399 

dlerror: dlopen(/path/libSecond.dylib, 9): Library not loaded: libFirst.dylib 
    Referenced from: /path/libSecond.dylib 
    Reason: image not found 

Co nie rozumiem jest to, że jej mówi libFirst.dylib nie jest załadowany, ale jestem obecnie w funkcji z libFirst.dylib, więc jak to możliwe?

Wszystkie moje ścieżki w DYLD_LIBRARY_PATH również wydają się poprawne.

Z góry dziękuję, że utknąłem na tym przez wiele dni.

+0

Czy próbowałeś czegoś takiego jak strace? Może dać ci więcej informacji, aby zobaczyć, które połączenie nie działa. – Josh

+0

Mój ślad stosu pokazuje funkcję, która wywołuje dlopen o nazwie CreateModule na libSecond.dylib, która jest funkcją wewnątrz libFirst.dylib. –

+0

Brak śledzenia stosu - strace oznacza śledzenie systemu. Śledzi wywołania funkcji, takie jak otwieranie plików, statystyki i-węzłów itd. Może to rzucić trochę światła na to, gdzie dokładnie twój system operacyjny wygląda. – Josh

Odpowiedz

3

Skończyło się na użyciu -install_name, aby zmienić nazwę instalacji wszystkich moich bibliotek na @ rpath/dylibName.dylib, a następnie w Xcode I ustawić ścieżki wyszukiwania Ścieżka, używając @loader_path, aby znaleźć wszystkie moje .dylibs, które używałem.

+0

Czy możesz podać całą linię poleceń przy użyciu * -install_name *? –

+1

Witam @MartinDelille. Zrobiłem to ponad 3 lata temu, więc nie mam dokładnej linii poleceń, ale tutaj jest blog o tym, jak z niego korzystać: http://log.zyxar.com/blog/2012/03/10/install-name -on-os-x / –

Powiązane problemy