Instrukcje kompilacji Mac OS X.doc

(39 KB) Pobierz

Instrukcje kompilacji Mac OS X.

Wymagania wstępne w systemie Mac OS X           
                                                                                                                 

10.6.x (Snow Leopard), 10.7.x (lew), 10.8.x (góra Lion), 10.9.x (Mavericks) lub 10.10.x (Yosemite) działa na sprzęcie Intela (sprzęt PowerPC nie jest obsługiwany). 
Należy pamiętać, że tworzenie wariantu X11 VirtualBox na Mac OS X nie jest obsługiwane.

Xcode pasujące do wersji Mac OS X (  HYPERLINK "http://developer.apple.com/tools/download/" http://developer.apple.com/tools/download/ ):

3.2.0 lub nowszy dla Snow Leopard

4.1.x dla Lion i nowszych (4.2 i nowsze wersje nie będą działały!) Możesz użyć tools / darwin.x86 / bin / xcode-4.1-extrator.sh, aby "zainstalować" potrzebne bity na późniejszych wersjach OS X.

Niektóre rzeczy z MacPorts (  HYPERLINK "http://www.macports.org/" http://www.macports.org/ ). 
Po zainstalowaniu MacPorts, nie zapomnij dodać następujących dwóch linii do swojego ~ / .profile

export PATH = / opt / local / bin: / opt / local / sbin: $ PATH

export MANPATH = / opt / local / share / man: $ MANPATH

Następnie wykonaj następujące polecenie: 
dla <Snow Leopard

sudo port install libidl doxygen texlive texlive-latex-extra texlive-fonts-extra cdrtools
dla> = Snow Leopard (32 Bit)
sudo port install libidl + uniwersalny doxygen texlive texlive-latex-extra texlive-fonts-extra cdrtools

Doxygen i texlive * są opcjonalne. W wersji 10.5 może być potrzebna nowsza wersja OpenSSL niż wersja dostarczona przez system. Jeśli tak, wykonaj:

sudo port install openssl

Qt / Mac (  HYPERLINK "http://qt.nokia.com/downloads/qt-for-open-source-cpp-development-on-mac-os-x" http://qt.nokia.com/downloads/qt-for-open-source-cpp-development-on-mac-os-x ) 
Carbon 4.4.x w górę w przypadku Tiger 
Cocoa 4.5.x w górę w przypadku systemu Leopard / Snow Leopard / Lion

LaTeX ("sudo port install texlive texlive-fonts-extra texlive-latex-extra texlive-latex-recommended") do budowania dokumentacji

Niektóre słowa w systemach operacyjnych 32-bitowych i 64-bitowych

Począwszy od wersji 10.6 Mac OS X jest dostępny w trybie 64-bitowym z 10,7 najbardziej graficzną aplikacją działającą w trybie 64-bitowym. Musimy jednak odróżnić użytkownika od przestrzeni jądra. Ponieważ VirtualBox używa własnych rozszerzeń jądra, musi być zbudowany i uruchomiony w wersji, która pasuje do wariantu jądra. Możesz sprawdzić bieżący tryb jądra, wykonując uname -m . Jeśli pokazuje to i386 , działa w 32- bitach i jeśli pokazuje x86_64 , uruchamia jądro 64-bitowe. Aby przełączać się między tymi trybami podczas uruchamiania (na obsługiwanym sprzęcie), zobacz  HYPERLINK "https://support.apple.com/kb/ht3773" ten artykuł o kb . Jeśli system kompilacji nie koryguje wykrycia właściwego trybu jądra, możesz użyć --target-arch =, aby go nadpisać. Należy również pamiętać, że VirtualBox może wykonywać 64-bitowe systemy operacyjne dla gości, nawet jeśli są 32-bitowe.

Budowanie VirtualBox

Przejdź do katalogu głównego źródeł i uruchom skrypt configure:

./configure --able-hardening

Możesz ręcznie ustawić architekturę docelową za pomocą --target-arch = x86 lub amd64 , jeśli wystąpią problemy związane z architekturą.

Jeśli znajdzie wszystko, czego potrzebuje, utworzy plik o nazwie ! AutoConfig.kmk zawierający ścieżki do różnych narzędzi w twoim systemie. Ponadto utworzy skrypt instalacji środowiska o nazwie env.sh. Ten krok należy wykonać tylko raz (jeśli coś zmieni się w konfiguracji narzędzia do kompilacji, może być konieczne powtórzenie go, ale należy pamiętać, że oba pliki wyjściowe zostaną nadpisane). Aby uzyskać dodatkowe opcje, takie jak podanie ścieżki do biblioteki OpenSSL, zobacz ./configure --help .

Ilekroć chcesz zbudować VirtualBox, musisz otworzyć powłokę i pobrać wygenerowany skrypt instalacyjny środowiska env.sh , np.

. ./env.sh

Aby zbudować typ

kmk

Wartością domyślną jest kompilacja wydania, jeśli chcesz wykonać debugowanie lub kompilację profilu, dodaj BUILD_TYPE = debug lub BUILD_TYPE = profil jako argument do kmk lub wyeksportuj go jako zmienną środowiskową w powłoce.

Uruchamianie VirtualBox

Załaduj wszystkie moduły rozszerzeń jądra. Można je znaleźć w out / darwin.x86 / release / dist wraz z małym skryptem ( loadall.sh ), aby je załadować. Wykonaj i upewnij się, że moduły ładują się pomyślnie.
Wprowadź / darwin.x86 / release / dist / VirtualBox.app / Contents / MacOS / .

Uruchom ./VirtualBox

Budowanie pakietów OSE do dystrybucji
Nigdy nie należy wyłączać hartowania (patrz poprzednia sekcja) podczas tworzenia pakietów do redystrybucji.

Utwardzanie wymaga dodatkowych kroków konfiguracji i późniejszej kompilacji. Domyślny katalog instalacyjny VirtualBox to /Applications/VirtualBox.app/ . Jeśli chcesz to zmienić, powiedz w /Aplikacje/OpenSource/VirtualBox.app/ , musisz dodać następujące do LocalConfig.kmk :

VBOX_PATH_APP_PRIVATE = "/Applications/OpenSource/VirtualBox.app/Contents/MacOS"
VBOX_PATH_APP_PRIVATE_ARCH = "/Applications/OpenSource/VirtualBox.app/Contents/MacOS"
VBOX_PATH_SHARED_LIBS = "/Applications/OpenSource/VirtualBox.app/Contents/MacOS"

VBOX_PATH_APP_DOCS = "/Applications/OpenSource/VirtualBox.app/Contents/MacOS"

Może również mieć sens wyłączenie niektórych elementów programistycznych, na przykład przypadków testowych. Dodaj następujące do LocalConfig.kmk :

VBOX_WITH_TESTSUITE =

VBOX_WITH_TESTCASES =

Począwszy od VirtualBox 4.1, tworzone są dodatkowe symbole debugowania. Możesz temu zapobiec, dodając następujące do LocalConfig.kmk :

kBuildGlobalDefaults_LD_DEBUG =

Następnie przebuduj VirtualBox i zainstaluj go w / Applications / OpenSource / . Nie ma żadnego wsparcia dla instalacji VirtualBox w katalogu docelowym. Po prostu skopiuj pliki do miejsca docelowego. Teraz upewnij się, że pliki setuid mają odpowiednie uprawnienia:

sudo chown -R root: admin /Applications/OpenSource/VirtualBox.app/
sudo chmod u + s /Aplikacje/OpenSource/VirtualBox.app/Contents/MacOS/VirtualBox
sudo chmod u + s /Aplikacje/OpenSource/VirtualBox.app/Contents/MacOS/VirtualBoxVM
sudo chmod u + s /Aplikacje/OpenSource/VirtualBox.app/Contents/MacOS/VBoxHeadless
sudo chmod u + s /Aplikacje/OpenSource/VirtualBox.app/Contents/MacOS/VBoxNetAdpCtl

sudo chmod u + s /Aplikacje/OpenSource/VirtualBox.app/Contents/MacOS/VBoxNetDHCP

Kolejnym wymaganiem dotyczącym hartowania jest to, że każdy składnik ścieżki katalogu nadrzędnego VirtualBox.app/ jest własnością root'a, a nie zapisu na świecie . Upewnij się, że tak właśnie jest.

Ścieżki względne vs. bezwzględne w używanych bibliotekach

Jeśli podczas uruchamiania VirtualBox zobaczysz coś takiego jak następujący błąd, musisz zmienić używane biblioteki, aby korzystać z bezwzględnych ścieżek.

VirtualBox: supR3HardenedMainGetTrustedMain: dlopen ("/ Applications / VirtualBox.app / Contents / MacOS / VirtualBox.dylib",) nie powiodło się: \
dlopen (/Aplikacje/VirtualBox.app/Contents/MacOS/VirtualBox.dylib, 10): Biblioteka nie załadowana: QtCore.framework / Versions / 4 / QtCore
  Referencje od: /Aplikacje/VirtualBox.app/Contents/MacOS/VirtualBox.dylib

  Powód: niebezpieczne używanie względnej rpath QtCore.framework / Versions / 4 / QtCore w /Applications/VirtualBox.app/Contents/MacOS/VirtualBox.dylib z ograniczoną binarną

W systemie Mac OS X nie można używać bibliotek ze względnymi ścieżkami do odwoływania się do innych bibliotek, gdy plik wykonywalny ma wartość setuid. Możesz wyświetlić wszystkie połączone biblioteki za pomocą następującego polecenia:

otool -L /Aplikacje/VirtualBox.app/Contents/MacOS/VirtualBox.dylib

Następnie zakładając, że Qt jest zainstalowany w /Applications/VirtualBox.app/Contents/Frameworks/ , możesz zmienić ścieżkę, używając:

install_name_tool -id /Applications/VirtualBox.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui \
/Aplikacje/VirtualBox.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui
install_name_tool -change @executable_path /../ Frameworks / QtCore.framework / Versions / 4 / QtCore \
/Aplikacje/VirtualBox.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore \

/Aplikacje/VirtualBox.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui

Pierwsze polecenie zmienia identyfikator samej biblioteki. Drugi zmienia odniesienia do innych bibliotek. Tam pierwszą ścieżką jest stara odnośna ścieżka, druga to nowa ścieżka, a ostatnia ścieżka to plik do zmiany (patrz man nazwa_instalacji_tool ).Uwaga, musisz to powtórzyć z każdą zaangażowaną biblioteką (przynajmniej VirtualBox.dylib , QtCore , QtGui , QtNetwork , QtOpenGl ).

 

Zgłoś jeśli naruszono regulamin