2009-10-25 13 views
21

Jestem początkującym XCode. Próbuję podążać za these instructions. Najwyraźniej brakuje mi czegoś, ponieważ chociaż widzę, że struktura, którą chcę, została skopiowana do pakietu aplikacji, nie mogę się do niej odwoływać.Szkielet wiązki z aplikacją w kodzie XCode

Kiedy uruchomić aplikację z komputera innego niż kopalni (lub jeśli usunąć OpenCV z/Library/Frameworks /) pojawia się następujący błąd:

Dyld Error Message: Library not loaded: /Users/david/Library/Frameworks/OpenCV.framework/Versions/A/OpenCV Referenced from: /Users/g/Demo/Slates/ClipSplitter/build/Release/ClipSplitter.app/Contents/MacOS/ClipSplitter Reason: image not found

Nie ma użytkownika „David” na mój system, jeśli to robi jakąkolwiek różnicę. Również jest to wcześniej zbudowany OpenCV pobrany z Internetu. (Here’s a screenshot of the project zgodnie z wymaganiami w komentarzach.)

+0

Gdzie jest wewnątrz pakietu aplikacji? –

+0

Spis treści/Frameworks/OpenCV.framework –

+0

Powiedziałbym, że po zrzucie ekranu twojego okna projektu z odpowiednim celem całkowicie rozwiniętym. –

Odpowiedz

29

Po zbudowaniu OpenCV.framework został skonfigurowany do korzystania ze ścieżki instalacji /Users/david/Library/Frameworks/.

Ponieważ chcesz używać biblioteki jako prywatnej architektury (zainstalowanej w opakowaniu aplikacji pod adresem ClipSplitter.app/Contents/Frameworks/OpenCV.framework), musisz zmienić ścieżkę instalacji. Można to łatwo wykonać za pomocą terminala w następujący sposób:

$ install_name_tool -id @executable_path/../Frameworks/OpenCV.framework/OpenCV <your_path>/OpenCV.framework/OpenCV 

Oczywiście trzeba dostosować ścieżkę ostatniego argumentu.

Teraz, łącząc aplikację, zmodyfikowany framework informuje linker, że dyld musi szukać OpenCV.framework w opakowaniu aplikacji twojej aplikacji (w katalogu ClipSplitter.app/Contents/Frameworks).

Teraz musisz skopiować plik OpenCV.framework do opakowania aplikacji. Możesz to zrobić jako część procesu kompilacji, dodając fazę tworzenia kopii plików: Kliknij prawym przyciskiem myszy cel, wybierz Dodaj-> Nowa faza budowy-> Nowa faza budowy plików kopii. Wybierz "Frameworks" z okna "Destination" i zamknij okno.

Twój cel będzie teraz zawierał nową fazę, do której możesz dodać plik OpenCV.framework, przeciągając ikonę z Nawigatora projektu po lewej stronie okna Xcode. Zauważ, że Xcode nie pozwoli ci dodać folderu do fazy kopiowania plików za pomocą przycisku "+", więc aby skopiować strukturę, musisz ją przeciągnąć.

+2

To było prawie całkowicie słuszne. Polecenie, które musiałem uruchomić, to: $ install_name_tool -id @executable_path /../ Frameworks/OpenCV.framework/OpenCV /OpenCV.framework/OpenCV, ale to było wystarczające, aby mnie tam zabrać. Dzięki!!!! –

+0

Ups, w prawo. Dzieje się tak, jeśli nie wypróbujesz tego, co piszesz. Przepraszam za zamieszanie. –

+0

Jeśli instalujesz więcej niż jedną ramkę na ścieżce instalacji, która polega na sobie nawzajem_, to nie zadziała. Musisz również ustawić ścieżkę przeszukiwania ścieżek w aplikacji xcode, aby wyszukać w @loader_path /../ Frameworks. Znalazłem to wyjaśnienie naprawdę pomocne: http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/ – NHDaly

6

Musisz ustawić build ustawienie „katalogu instalacyjnego” na @executable_path/../Frameworks

Patrz rozdział o Osadzanie Prywatna Framework w swojej Pakiet aplikacyjny w https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Tasks/CreatingFrameworks.html

Pozdrawiam

+3

Powinieneś przynajmniej wspomnieć, że to ustawienie musi zostać zastosowane podczas budowania struktury, nie aplikacja łącząca framework. –

+0

Tak, jestem pewien, że to dobra rada, z wyjątkiem tego, że nie zbudowałem struktury OpenCV, pobrałem ją wcześniej. –

+1

Tęskniłem za ostatnim zdaniem, odpowiedź Nikolai jest bardziej odpowiednia w tym przypadku. Nie jestem pewien, dlaczego wolałbyś spędzać czas na naprawianiu uszkodzonych, wstępnie zbudowanych bibliotek open-source, zamiast budować je właściwie. –

2

Korzystanie Xcode 5, można Ułatw to za pomocą panelu Build Phases swojego celu aplikacji.

Domyślny wygląd tego panelu jest

Poprzez naciśnięcie przycisku „+” pod kopiowania plików, można dodać ramy w postaci pliku, który zostanie skopiowany do ram w aplikacji pakietu.

Teraz, po zbudowaniu, twoje Framework (s) zostaną skopiowane do twojego pakietu.

+1

Obrazy są martwe. Prześlij ponownie? – pkamb

Powiązane problemy