Mac OS X で言語系を開発しようとするとまず出てくるのがXCode。
これのお陰で色々楽ができる反面、マイコン開発のようにMacOSX以外を吐き出そうとすると若干厄介な事になります。
私の場合はsecureな_stdio.hが癇癪を起こして研究で使うライブラリは使えません。
そこで今回はGNU謹製のgcc最新版、Gcc 4.8系*1を導入してみる事にします。
MacPortsの更新
$ sudo port selfupdate ---> Updating MacPorts base sources using rsync MacPorts base version 2.2.0 installed, MacPorts base version 2.2.0 downloaded. ---> Updating the ports tree ---> MacPorts base is already the latest version The ports tree has been updated. To upgrade your installed ports, you should run port upgrade outdated $ sudo port sync ---> Updating the ports tree
gcc48を導入
念のため、Gccの現状を確認します。
$ gcc --version Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 5.0 (clang-500.2.76) (based on LLVM 3.3svn) Target: x86_64-apple-darwin12.5.0 Thread model: posix
特に変わった事がないので、いよいよgcc48、およびgcc切り替えに必要なツールを導入していきます
$ sudo port install gcc48 ---> Computing dependencies for gcc48 ---> Dependencies to be installed: cctools cctools-headers llvm-3.3 libffi llvm_select cloog gmp isl gcc_select ld64 libgcc libiconv libmpc mpfr ... ---> Installing gcc48 @4.8.1_3 ---> Activating gcc48 @4.8.1_3 ---> Cleaning gcc48 ---> Updating database of binaries: 100.0% ---> Scanning binaries for linking errors: 100.0% ---> No broken files found. $ sudo port install gcc_select ---> Cleaning gcc_select ---> Scanning binaries for linking errors: 100.0% ---> No broken files found.
フォルダの構成要素を調べます。
今回用事があるのは実行ファイルなので、絞り込みをして……
$ port contents gcc48 | grep /bin/ /opt/local/bin/aot-compile-mp-4.8 /opt/local/bin/c++-mp-4.8 /opt/local/bin/cpp-mp-4.8 /opt/local/bin/g++-mp-4.8 /opt/local/bin/gappletviewer-mp-4.8 /opt/local/bin/gc-analyze-mp-4.8 /opt/local/bin/gcc-ar-mp-4.8 /opt/local/bin/gcc-mp-4.8 /opt/local/bin/gcc-nm-mp-4.8 /opt/local/bin/gcc-ranlib-mp-4.8 /opt/local/bin/gcj-dbtool-mp-4.8 /opt/local/bin/gcj-mp-4.8 /opt/local/bin/gcjh-mp-4.8 /opt/local/bin/gcov-mp-4.8 /opt/local/bin/gfortran-mp-4.8 /opt/local/bin/gij-mp-4.8 /opt/local/bin/gjar-mp-4.8 /opt/local/bin/gjarsigner-mp-4.8 /opt/local/bin/gjavah-mp-4.8 /opt/local/bin/gkeytool-mp-4.8 /opt/local/bin/gnative2ascii-mp-4.8 /opt/local/bin/gorbd-mp-4.8 /opt/local/bin/grmic-mp-4.8 /opt/local/bin/grmid-mp-4.8 /opt/local/bin/grmiregistry-mp-4.8 /opt/local/bin/gserialver-mp-4.8 /opt/local/bin/gtnameserv-mp-4.8 /opt/local/bin/jcf-dump-mp-4.8 /opt/local/bin/jv-convert-mp-4.8 /opt/local/bin/rebuild-gcj-db-mp-4.8 /opt/local/bin/x86_64-apple-darwin12-c++-mp-4.8 /opt/local/bin/x86_64-apple-darwin12-g++-mp-4.8 /opt/local/bin/x86_64-apple-darwin12-gcc-4.8.1 /opt/local/bin/x86_64-apple-darwin12-gcc-ar-mp-4.8 /opt/local/bin/x86_64-apple-darwin12-gcc-mp-4.8 /opt/local/bin/x86_64-apple-darwin12-gcc-nm-mp-4.8 /opt/local/bin/x86_64-apple-darwin12-gcc-ranlib-mp-4.8 /opt/local/bin/x86_64-apple-darwin12-gcj-mp-4.8 /opt/local/bin/x86_64-apple-darwin12-gfortran-mp-4.8
このウチのどこかですが……今回はgcc-mp系が正解です。
$ which gcc-mp-4.8 /opt/local/bin/gcc-mp-4.8
動作を確かめる
それでは、最後のまとめに、Hello,Worldを出力するだけの簡単な奴を書いて動作を確認します。
まずはそのまま
$ nano test.c $ gcc test.c $ ./a.out hello, world
ソースコードはそのままでも吐き出すバイナリは違うはずですが、
それだと一寸寂しいので、hello, youと出力するようにしてにてコンパイルしてみます。
$ gcc-mp-4.8 test.c $ ./a.out hello, you
確認できましたので、標準のgccとして設定します。
$ port contents gcc_select Port gcc_select contains: /opt/local/etc/select/gcc/base /opt/local/etc/select/gcc/llvm-gcc42 /opt/local/etc/select/gcc/none $ sudo port install gcc_select Password: ---> Cleaning gcc_select ---> Scanning binaries for linking errors: 100.0% ---> No broken files found. $ port contents gcc_select Port gcc_select contains: /opt/local/etc/select/gcc/base /opt/local/etc/select/gcc/llvm-gcc42 /opt/local/etc/select/gcc/none
今あるgccを出力させ、出力を切り替えます。
$ port select --list gcc Available versions for gcc: llvm-gcc42 mp-gcc48 none (active) $ sudo port select --set gcc mp-gcc48 Selecting 'mp-gcc48' for 'gcc' succeeded. 'mp-gcc48' is now active. $ gcc -v Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Apple LLVM version 5.0 (clang-500.2.76) (based on LLVM 3.3svn) Target: x86_64-apple-darwin12.5.0 Thread model: posix
……アレ?
これはよくある間違いというかミスですが、.bashrcを読み込まないと反映されません。
$ source ~/.bashrc $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/opt/local/libexec/gcc/x86_64-apple-darwin12/4.8.1/lto-wrapper Target: x86_64-apple-darwin12 Configured with: /opt/local/var/macports/build/_opt_mports_dports_lang_gcc48/gcc48/work/gcc-4.8.1/configure --prefix=/opt/local --build=x86_64-apple-darwin12 --enable-languages=c,c++,objc,obj-c++,lto,fortran,java --libdir=/opt/local/lib/gcc48 --includedir=/opt/local/include/gcc48 --infodir=/opt/local/share/info --mandir=/opt/local/share/man --datarootdir=/opt/local/share/gcc-4.8 --with-local-prefix=/opt/local --with-system-zlib --disable-nls --program-suffix=-mp-4.8 --with-gxx-include-dir=/opt/local/include/gcc48/c++/ --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local --with-cloog=/opt/local --enable-cloog-backend=isl --disable-cloog-version-check --enable-stage1-checking --disable-multilib --enable-lto --enable-libstdcxx-time --with-as=/opt/local/bin/as --with-ld=/opt/local/bin/ld --with-ar=/opt/local/bin/ar --with-bugurl=https://trac.macports.org/newticket --with-pkgversion='MacPorts gcc48 4.8.1_3' Thread model: posix gcc version 4.8.1 (MacPorts gcc48 4.8.1_3)
完了です。お疲れさまでした。
参考もと
- Mac OS X 10.7.2(Lion)に、macports で gcc を入れる(だけの)物語 | JAM☆ぱん
- gcc - Issue linking g++-4.8 Mac OSX 10.8 - Stack Overflow
- MacPortsでgcc 4.7を。 - udon's blog
- Mac OS X に GCC 4.8 をインストール - mattintosh note -hatena-
- Mac OS X SnowLeopardでGCCを切り替え – ymt2log
- Mac OS X Lion に gcc-4.2 をインストールするよ [nanka-iroiro]
- Installing GCC on Mac