2011-10-02 17 views
8

Jaka jest różnica między Apple gcc a GNU gcc? Czy Apple gcc jest nadzbiorem standardowego?Aktualizowanie Apple g ++/gcc

The g ++ informacje o wersji w moim OSX pokazuje:

$ g++ --version 
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00) 

Niektóre z najnowszych funkcji C++ 11 są w gcc 4.3/4.4 za this. Czy istnieje nowsza wersja gcc Apple, którą mogę uaktualnić do. jeśli tak, jak mogę to zrobić? Mam Xcode 4.1

Odpowiedz

6

Cóż, dla pierwszej części, Apple w tym przypadku używa backendu LLVM dla g ++ jako domyślnego g ++. Apple instaluje także cudownie nazwane interfejsy clang i clang ++ dla LLVM. Jednak absolutnie nic nie stoi na przeszkodzie, aby zainstalować nowe gałęzie GCC; MacPorts ma pakiety dla wszystkiego do 4.6. Jeśli szukasz "TYLKO APPLE" na stronie man gcc, zobaczysz, co nie będzie dostępne poza oddziałami Apple.

6

Obok już wspomniano llvm-gcc i clang, jest również dostarczana GCC Jab-4,2 (bez llvm backend) w /usr/bin/gcc-4.2 w Xcode 4.1. Ale nie zastępuj wersji dostarczonych przez Apple w wersji /usr/bin. Wszystkie trzy obsługują nadzbiór funkcji obejmują obsługę wielu serwerów i obsługę wielu abiasów, których nie ma w przypadku dystrybucji GNU vanilla, a wiele pakietów zewnętrznych zależy od tych funkcji w OS X. Jeśli zainstalujesz coś za pośrednictwem MacPorts lub ze źródła, zainstalować na innej ścieżce, na przykład /opt/local/bin lub /usr/local/bin. Użyj zmiennych PATH lub zmiennych środowiskowych do zarządzania używanym kompilatorem.

2

Możesz użyć macport do zainstalowania nowszych wersji. Możesz go pobrać here. Po zainstalowaniu gcc z macport, można go używać z Xcode dodając ustawienie zdefiniowane przez użytkownika do kompilacji:

- Go to the build setting of your project 
- Click on the add build setting button 
- Choose user-defined setting 
- Name it CC 
- In the value field, put the path of the gcc version installed by macport. 
1

Jedną rzeczą, która na pewno jest obecny w branży Jabłko GCC, ale nie w GNU GCC jest blocks .