2010-10-04 11 views
6

Podsumowanie

Chcę uruchomić moją skompilowaną aplikację dla bibliotek 10.5. Czy istnieje zmienna środowiskowa, która umożliwia to działanie?Uruchamianie aplikacji na innym pakiecie SDK w systemie OS X?

Dłuższa wersja

przekraczam skompilowane mój OS X aplikacji C++ dla 10,5 cel, na hoście 10.6. Kompiluje się dobrze. Skompilowana aplikacja jest połączona z bibliotekami takimi jak /usr/lib/libstdc++.6.dylib. Gdy uruchomię go w moim systemie, użyje on biblioteki wersji "hosta", która wynosi 10.6. Chciałbym przetestować go na wersjach 10.5, które są zawarte w katalogu `/Developer/SDKs/MacOSX10.5.sdk. Jak mam to zrobic?

Próbowałem różnych smaków DYLD_LIBRARY_PATH, DYLD_ROOT_PATH, itp., Jako documented in the manual, ale nie udało mi się go uruchomić.

+1

Bardzo dobre pytanie, nie mam odpowiedzi, chcielibyśmy usłyszeć jeden. – jv42

+0

Nie znam odpowiedzi, ale C++ może być łatwo skompilowany jako * statyczny * plik binarny - będzie zawierał wszystkie biblioteki w jednym, autonomicznym pliku wykonywalnym. 'g ++ -static' – Mikhail

Odpowiedz

3

Używaj install_name_tool zmienić ścieżkę. Możesz nie być w stanie przecisnąć się dłuższą ścieżką, jeśli linker nie dodał dopełnienia, ale zamiast tego możesz użyć ścieżki rpath. Na przykład, zmieniając ścieżkę obciążenia dla aplikacji na moim systemie wykorzystania 10,5 SDK wykonując:

install_name_tool -change /usr/lib/libstdc++.6.dylib @rpath/libstdc++.6.dylib /path/to/executable 
install_name_tool -add_rpath /Developer/SDKs/MacOSX10.5.sdk/usr/lib /path/to/executable 

i pobiegł w porządku po fakcie. Nie chciałbym robić żadnych zapewnień, ale zakładając, że początkowo zestawiłeś z SDK 10.5, masz szansę.

Jeśli potrzebujesz zobaczyć ścieżki, których używa plik wykonywalny, otool -L wyświetli listę.

+0

W skrócie, STD C++ może nie być najlepszym przypadkiem testowym, ale nadal jest warte strzału. –

+1

Właśnie zdałem sobie sprawę, że OP poprosił o zmienną środowiskową. Jeśli ścieżka ładowania zostanie zmieniona na odniesienie do @ ścieżka, opcja DYLD_LIBRARY_PATH powinna być opcjonalna. –

+0

Nigdy nie doszedłem do sprawdzenia, czy to działa, ale z tego, czego się dowiedziałem, wydaje się właściwą odpowiedzią. –

0

Jest mało prawdopodobne, że jest to możliwe, ponieważ system OS X nie ma stabilnego jądra ABI. Zamiast tego stabilny ABI jest zapewniany przez biblioteki systemowe. Dlatego używanie bibliotek systemowych w innej wersji niż jądro może się zepsuć. (Nie wiem, w jakim stopniu łamie.)

Zobacz http://developer.apple.com/library/mac/#qa/qa2001/qa1118.html

-1

Spróbuj tego:

  1. Otwórz projekt w Xcode.
  2. Under wykonywalne w kolumnie Grupy & plików kliknij prawym przyciskiem myszy na plik wykonywalny aplikacji i wybierz Get Info
  3. Wybierz zakładkę Argumenty
  4. W dolnej części okna, w sekcji „Zmienne należy ustawić w środowisku : ", kliknij przycisk +.
  5. W wierszu, który pojawia się w tabeli, wpisz DYLD_LIBRARY_PATH w polu Nazwa i wprowadź ścieżkę (np. /Developer/SDKs/MacOSX10.5.sdk/usr/lib) w polu Wartość.

Teraz masz skonfigurowaną zmienną środowiskową ścieżki łącza. Ta zmienna środowiskowa zostanie ustawiona dla Ciebie podczas uruchamiania tego pliku wykonywalnego z poziomu Xcode. Aby przetestować swoją aplikację, po prostu przejdź do menu Uruchom i wybierz "Uruchom". Jeśli uruchomisz aplikację przez dwukrotne kliknięcie jej bezpośrednio w Finderze, nie dostaniesz tej zmiennej środowiskowej dla ciebie. Ustawienie działa tylko przy uruchomieniu z Xcode.

Oto dokumentacji Apple na tym procesie:

http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/XcodeProjectManagement/230-Defining_Executable_Environments/executable_environments.html

+0

Jak już powiedziałem w pytaniu, DYLD_LIBRARY_PATH nie pomaga. Odpowiedziałeś na pytanie "Jak ustawić DYLD_LIBRARY_PATH w Xcode", co nie jest tym, o co prosiłem (między innymi dlatego, że nie używam xcode). –

+0

To prawda. W przeszłości miałem DYLD_LIBRARY_PATH pracę dla mnie, więc moim założeniem było, że nie ustawiłeś poprawnie zmiennej środowiskowej w Xcode. Nie zdawałem sobie sprawy, że nie korzystasz z Xcode. Co używasz do budowania? Po prostu ciekawy. Pomyśl o tym, nie wspomniałeś o tym, że wiesz, że twoje próby załadowania alternatywnego dylikusa zakończyły się niepowodzeniem. Czy możesz podać trochę więcej informacji na ten temat? – Ryan

Powiązane problemy