2013-06-17 17 views
14

Podczas używania backinnerów Clang lub GCC do tworzenia plików wykonywalnych dla OSX, flaga -mmacosx-version-min=version może być użyta do ustawienia najwcześniejszej wersji OSX, na którym będzie uruchamiany plik wykonywalny.Określanie minimalnej wersji OSX binarny został skompilowany dla

Czy istnieje jakiś sposób śledzenia wstecz z danego pliku wykonywalnego, którego flaga została użyta do skompilowania? To znaczy. czy istnieje sposób na określenie, która minimalna wersja OSX jest celem danego pliku wykonywalnego?

+1

dla przypomnienia, Apple nie przyczyniły się do GCC, ponieważ jego licencja została zmieniona na GPLv3. Jeśli to możliwe, użyj Clang/LLVM. –

Odpowiedz

27

Użyj otool -l /path/to/binary i sprawdź komendę ładowania LC_VERSION_MIN_MACOSX; w szczególności pole wersji.

na przykład binarne przygotowana z 10,8 SDK celu wdrożenia (-mmacosx-version-min) 10,8 powinien mieć LC_VERSION_MIN_MACOSX tak:

Load command 9 
     cmd LC_VERSION_MIN_MACOSX 
    cmdsize 16 
    version 10.8 
     sdk 10.8 

natomiast binarnego sporządzoną z 10.8 SDK rozmieszczenia cel 10.7 powinny mieć LC_VERSION_MIN_MACOSX polecenie obciążenia tak:

Load command 9 
     cmd LC_VERSION_MIN_MACOSX 
    cmdsize 16 
    version 10.7 
     sdk 10.8 
+0

Czy istnieje sposób uzyskania tych informacji dla bibliotek statycznych (pliki ".a")? –

+0

Działa to również w przypadku bibliotek statycznych (pliki .a). Zobaczysz takie polecenie obciążenia dla każdego obiektu w bibliotece. Jest ładna aplikacja UI dla Maca o nazwie "MachOView", która umożliwia wygodne przeglądanie plików binarnych i łatwe wyszukiwanie tych poleceń ładowania. –