http://www.sadaji.net/Firmware/eclipse/index.htm
本ページでは、初心者をターゲットに説明している。
多少不快な表現があるかも知れないが、流して欲しい。
1.以下のものをダウンロードする。
・Pleiades All in One 日本語ディストリビューション [必須]
C/C++ 64bit Full Edition
http://mergedoc.osdn.jp/
バージョンは4.5 Marsで確認済み。32bit環境では当然32bit版が必要。Ultimateでもよい。
日本語が嫌いであれば、Eclipse公式でも良い。
・Windows toolchain for Raspberry/PI [必須]
GCC 4.6.3である、raspberry-gcc4.6.3.exeで動作確認済み。
http://gnutoolchains.com/raspberry/
・Boost C++ Libraries [おまけ]
Version 1.58.0で確認している。
http://www.boost.org/
・TeraTerm [おまけ]
SCPでファイル転送、コンソールアクセスする。
他に転送手段がある、SSHアクセスしないでUSBなどで渡す場合はなくても良い。
http://www.forest.impress.co.jp/library/software/utf8teraterm/
2.インストール手順
2-1.TeraTerm
適当にインストールしてください。これが出来ないなら以下読まないほうがいいです。
2-2. Eclipse - Pleiades All in One
適当なところに解凍すればそれでインストール完了です。
ただ、デスクトップなどに置くのは非常におすすめしません。
ここてば、C:\Pleiades\ に解凍したと仮定します。
C:\Pleiades\Eclipse\ に、Eclipse.exeがあればOKです。
初回起動時は、Eclipse.exeではなく、「eclipse.exe -clean.cmd」で起動します。
キャッシュのクリーンアップが行われます。
ワークスペースの選択は、「../workspace」のままで構いません。
C:\Pleiades\workspace\に保存されます。
「この選択をデフォルトとして使用し、今後この質問を表示しない」にチェックを付けてOK。
しばらくして、起動が完了したら閉じましょう。
2-3 Windows toolchain for Raspberry/PI
ダウンロードしてきたEXEファイルを起動すると、すぐにインストール直前の画面になります。
デフォルトでは「C:\SysGCC\Raspberry」にインストールするようになっています。
利用規約(GPLライセンス)を読み、同意できる場合は、
そのまま、「I accept the terms of liscense agreement」にチェックを付け、
Installボタンを押すとインストール完了です。
2-4 Boost C++ Libraries
入れる人だけ。ここではヘッダーオンリーでBoost asioを使う解説しかしないので
その場合のみ説明します。
http://sourceforge.net/projects/boost/files/boost/1.58.0/
ここからダウンロード。zipでもよいが、個人的には7zの方がオススメ。
ダウンロードしたら、解凍すれば完了。ヘッダーオンリーで使用するなら、
Bootstrapもb2も不要。
C:\boost_1_58_0\に解凍したと仮定する。
3.プロジェクトの作り方(Hello Worldをする)
3-1. まずはじめに
もうセットアップは終わっているので、プロジェクトを作りましょう。
まず、Eclipse.exeを起動。
起動したら、「ファイル(F)」→「新規(N)」→「Cプロジェクト」
3-2. 「Cプロジェクト」
プロジェクト名は適当に。ここでは「ccHello」とする。
ここで、プロジェクト・タイプは「実行可能」→「空のプロジェクト」。
ツールチェーンを「Cross GCC」とすること。
設定したら次へ。
3-3 「構成の選択」
特に何も変更せず次へ。
3-4 「クロスGCCコマンド」
重要です。
クロス・コンパイラー接頭部に「arm-linux-gnueabihf-」
クロス・コンパイラー・パスに「C:\SysGCC\Raspberry\bin」と入力。
そして完了をクリック。
3-5 ソースファイル入れよう
プロジェクトは生成されましたが、空っぽです。
ので、プロジェクトccHelloを右クリック。
「新規(N)」→「ソース・ファイル」をクリック。
「新規ソース・ファイル」というダイアログが開くので
ソース・ファイルの欄に、main.cと入力。(.cのファイル名であれば何でも良いが)
そして「完了(F)」をクリック。
3-6 Hello Worldしよう。
ソースが打ち込めるようになるので、HelloWorldを打ちましょう。
3-7 ビルドしよう
打ち込み終わったら、「ファイル(F)」→「すべて保管(Ctrl + Shift + S)」をクリック。
できたら、「プロジェクト(P)」→「すべでビルド(A)」をクリック。
ビルド結果は下に出ます。無事ビルドできましたかね?
ここで出来たバイナリは、ARM-Linux専用です。Windows上では実行できません。
3-8 ファイルを見に行こう
特にビルド設定を変えていなければ、出来上がったファイルは
「C:\pleiades\workspace\ccHello\Debug」に「ccHello」として生成されています。
これをTeraTerm等でRaspberryPiに転送。
chmod 777 ccHello
などとして、実行権限を付与した後、
./ccHello
と実行し、
「Hello World\n」と表示されれば万歳です。
4-1 C++で作る場合の注意点。
プロジェクトを上記の「Cプロジェクト」で作ってしまった場合、もれなくC++言語は
コンパイルやビルドに失敗します。
「新規(N)」→「C++ プロジェクト」から生成したプロジェクトでは、正常に行きます。
力尽きたのでここまで。
Boostを使う場合などの注意点は、あとで追記するかもしれません。
Boost aisoを使う場合のヒント。
ヒント1
当然インクルードパスの設定は必要です。ただちょっと罠がある。
GCCではなく、G++の方に設定する。
(.text+0x34): undefined reference to `main'
mainなんて関数ないヨとエラーを吐かれる時は、インクルードパスを直してると治ります。
というか、多分、ソースを保存してないだけだと思います。
デフォルトでは、ビルド時自動で保存はしてくれないです。
ヒント2
Boost Asioをヘッダオンリーで使う場合、「ライブラリがない」エラーを吐きます。
C:\boost/boost/system/error_code.hpp:221: undefined reference to `boost::system::generic_category()'
C:\boost/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()'
C:\boost/boost/system/error_code.hpp:223: undefined reference to `boost::system::system_category()'
./main.o: In function `error_code':
C:\boost/boost/system/error_code.hpp:322: undefined reference to `boost::system::system_category()'
./main.o: In function `boost::asio::error::get_system_category()':
C:\boost/boost/asio/error.hpp:230: undefined reference to `boost::system::system_category()'
ソースの先頭に以下の記述をすれば治ります。
#define BOOST_DATE_TIME_NO_LIB
#define BOOST_REGEX_NO_LIB
#define BOOST_ERROR_CODE_HEADER_ONLY
#define BOOST_SYSTEM_NO_LIB
ヒント3
それでもpthreadが無いエラーを吐くので
./main.o: In function `boost::asio::detail::posix_tss_ptr_create(unsigned int&)':
C:\boost/boost/asio/detail/impl/posix_tss_ptr.ipp:34: undefined reference to `pthread_key_create'
./main.o: In function `~posix_tss_ptr':
C:\boost/boost/asio/detail/posix_tss_ptr.hpp:48: undefined reference to `pthread_key_delete'
./main.o: In function `boost::asio::detail::posix_tss_ptr
C:\boost/boost/asio/detail/posix_tss_ptr.hpp:54: undefined reference to `pthread_getspecific'
./main.o: In function `~posix_tss_ptr':
C:\boost/boost/asio/detail/posix_tss_ptr.hpp:48: undefined reference to `pthread_key_delete'
collect2: ld returned 1 exit status
make: *** [ccpHello] Error 1
ライブラリの設定にpthreadを追加してやればOKです。
以上。