Linux に SFML をインストールするには、いろんな方法があるよ。
- ディストリビューションのリポジトリから直接インストールする
- 公式サイトから SDK をダウンロードする
- ソースコードをコンパイルする
選択肢その1が一番かんたんだね。
ディストリビューションの公式のリポジトリに、キミが欲しいバージョンの SFML があるなら、
パッケージマネージャーで取得できるんだ。
たとえば、Debian なら、こんな感じ:
sudo apt-get install libsfml-dev
選択肢その3はちょっと大変。
SFML が依存しているライブラリや開発用のヘッダーファイルを全てそろえて、CMake をインストールして、
その上で、コマンドをあれこれと手作業で入力しなくちゃいけないのです。
だけど、その分、キミのシステムにぴったりの SFML が手に入るんだ。なにしろキミのシステム上でビルドしたんだからね。
もし、この獣道を進むつもりなら、
ソースをコンパイルする方法のチュートリアル
があるから、参考にしてね。
選択肢その2は、その3よりはだいぶ楽だよ。
欲しいバージョンの SFML が公式のリポジトリにない場合は、選択肢その2で手を打つのが手っ取り早いかもね。
まずは
ダウンロードのページ
で SFML の SDK をダウンロード。圧縮ファイルを展開して、キミのマシンの好きな場所に配置だ。
マシンのアカウントの個人フォルダでもいいし(/home/[アカウント名]/sfml など)、
標準的なパス( /usr/local など)でもいいね。
もし、古いバージョンの SFML をインストール済みの場合は、
新しいバージョンと衝突しないように気をつけてね!
※ 訳註 ※
2.4.0 以降、公式サイトでダウンロードできるバイナリは 64bit版のみになりました。
32bit版が必要な場合は
ソースからビルドせよ、とのことです。
※ 訳註 ※
公式サイトには Linux用として「GCC - 64 bit」が置かれています。".tar.gz" 形式の圧縮ファイルです。
これを、
Windows上で "Lhaplus" などのツールで解凍すると、ファイルが破損します。
なぜかというと解凍ツールが悪いわけではなく、Windows と Linux ではファイルシステムが異なるためです。
(正確にいうと、ファイルが破損するというより、シンボリックリンクが参照できなくなる)
SFML をインストールする Linux環境上で tar コマンドで展開すれば問題ありません。
VMWare などで Windows環境と平行して作業する場合は気をつけてください。
・tar コマンド:
> tar xvfz SFML-2.4.0-linux-gcc-64-bit.tar.gz
Linux 上であっても、アーカイブマネージャーのような GUI ツールでファイルを抽出すると、やはりダメな場合があります。
tar コマンドを使っておくのが無難なようです。
さて、いよいよ SFML を使ったプログラムをコンパイルして SFML のライブラリとリンクする方法だよ。
だけど、IDE についてのお話はしません(Code::Blocks とか Eclipse とか)。
Makefile の書き方や、IDE でのプロジェクトの作り方については、他の先生に教えてもらってね。
だけど、もしキミが Code::Blocks 使いだったら、
こっちのチュートリアルが役立つと思うよ。
Windows 向けのお話だけど、Linux でもほとんど同じです。違うのは、Linux の場合は、
SFML を標準的なパスにインストールしているなら、コンパイラとリンカのサーチパスを設定しなくてもいいってところです。
さて! まずはソースファイルを作ろう!
名前は何にしようかな? うーんうーん……よし、"main.cpp" だ! 普通だ!
中に SFML のサンプルコードを書き込むよー。
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
ファイルは作れたかな? じゃあ次はコンパイルだ!
g++ -c main.cpp
SFML を標準的じゃないパスにインストールしてる場合は、
コンパイラさんに、SFML のヘッダーファイル(.hpp のファイルさんたち)がどこにいるのか、教えてあげてね。
g++ -c main.cpp -I<sfml-install-path>/include
<sfml-install-path> の部分には、SFML をコピーしたディレクトリのパスを当てはめてね。
たとえば /home/yourAccountName/sfml みたいな感じ。
そしたら次は、出来上がったオブジェクトファイルを SFML のライブラリにリンクしてあげよう。
そうしたら、実行ファイルの出来上がりだよ。
SFML には 5つのモジュールがあるんだ(システム、ウィンドウ、グラフィックス、ネットワーク、オーディオ)。
それぞれのライブラリにリンクするには、コマンドラインの後ろに "-lsfml-xxx" をくっつけてあげてね。
たとえば グラフィックスモジュールなら "-lsfml-graphics" だよ。
対応するライブラリファイルのファイル名と見比べてみてね。 ファイル名冒頭の "lib" と、拡張子 ".so" が省略されてるね。
g++ main.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system
SFML を標準的じゃないパスにインストールしている場合は、
リンカさんに SFML のライブラリさんたち(.so のファイル群)がどこにいるのか教えてあげてね。
g++ main.o -o sfml-app -L<sfml-install-path>/lib -lsfml-graphics -lsfml-window -lsfml-system
よーし! それじゃあ実行してみよう!
./sfml-app
どうかな? うまくいったかな?
うまくいかなかったお友達は、SFML を標準的じゃないパスにインストールしたのかもしれないね。
じゃあ、環境変数 LD_LIBRARY_PATH を設定して、ダイナミックリンカさんに、SFML ライブラリさんたちの場所を教えてあげよう。
export LD_LIBRARY_PATH=<sfml-install-path>/lib && ./sfml-app
うまくいったら、↓こんなウィンドウさんと、こんにちわだよ。
※ 訳註 ※
最新の SFML を使うには、Linux の側も最新の環境でないとうまくいかないことがあるようで「あれがない」「これが古い」というエラーメッセージと格闘する羽目になったりします。
チュートリアルに書いてある通りにやってるのに妙なエラーが出てウガー! という場合は、一つ前のバージョンの SFML を使ってみると、案外すんなり動いたりもします。