Mam program (w szczególności mój wpis dla SO DevDays Countdown app challenge), która opiera się na kilku dynamicznych bibliotek, a mianowicie libSDL, libSDL_ttf i innych. Mam zainstalowane te biblioteki pod /opt/local/lib
przez MacPorts, a wiele osób nie będzie ich zainstalowanych (a niektóre mogą je zainstalować, ale nie w tej lokalizacji).Jak rozpowszechniać system Mac OS X za pomocą bibliotek zależnych?
Jak mogę dystrybuować swój program tak, że ludzie bez tych bibliotek zainstalowanych można uruchomić go out-of-the-box? Oczywiście będę musiał rozpowszechniać różne pliki .dylib
, ale wykonanie tego jest niewystarczające. Program ładujący dynamicznie szuka bibliotek zainstalowanych w lokalizacjach, w których je zainstalowano. Czy istnieje sposób na powiedzenie dynamicznemu programowi ładującemu, aby szukał w bieżącym katalogu pliku wykonywalnego, na przykład, co system Windows robi z bibliotekami DLL? Ludzie nie powinni modyfikować żadnych zmiennych środowiskowych (np. DYLD_LIBRARY_PATH
), ponieważ znowu chcę, aby to działało natychmiast po uruchomieniu.
Po przemyśleniu tego, myślę, że po prostu pójdę ze statycznym łączeniem w celu dystrybucji. Jeśli mam zamiar rozpowszechniać biblioteki dynamiczne w każdym razie, to pokonuje kilka celów ich używania, więc równie dobrze mógłbym uniknąć bólu związanego z ładowaniem dynamicznym. –
4. Korzystając z opcji 2. powyżej, umieść frameworki wewnątrz swojego pakietu .app (plik .dmg) i zmień wymagania dotyczące plików wykonywalnych za pomocą polecenia install_name_tool. Oto kilka przykładów użycia parametru install_name_tool: http://qt-project.org/doc/qt-4.8/deployment-mac.html. Dietrich, czy mógłbyś włączyć to do swojej odpowiedzi? –
@ MilanBabuškov: Wygląda na to, że zostało to już uwzględnione w poniższej odpowiedzi. Nie widzę potrzeby duplikowania informacji. –