主にコンピュータ・プログラミング関係の話題を扱うブログ…を目指したこともありましたが、結局マンガやゲームのにわか批評サイトに成り下がった過去があるのでまぁそんな感じです。
・予定・連絡スペース

今のところ特に書くことはないです。
STLPort-5.1.5 がビルドできた!!やった!

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
広告が消えない…?

明解C言語の7章訂正しました。


それにしても、うーん…。真っ白な記事だと更新しても広告が消えないんですね…。
3ヶ月くらい放置してると↓だったか↑に広告が出るんですよ。
手軽に何とかしたいものですが…。
記事を修正している時間的な余裕がないので手短に。
以前紹介したSTLPortの記事の中で、

STLPortをそのままの設定で使用するとメモリリークが発生する。

と表記していましたが、どうもそうではないようです。
こちらのコメント欄を参照してください。

事実確認は全く行なっていませんので、リンク先やGoogle等から各人に判断していただくしかありません。
和訳していただいたkoma さん、ありがとうございました。
STLPort5.1.5 のインストールが無事終了しました!
長い道のりでしたが、良い経験ができました。
ここでは、今回のインストールに関して私がはまってしまった失敗点等を書きながら
インストール手順を示したいと思います。

Ver : STLPort5.1.5
OS : Win2k
IDE・コンパイラ: VC++8(VC++2005)

環境は上記の通り。STLPortをビルドする際に windows.h が必要になるようなので
別途PlatformSDK のインストールが必要です。

まず落ち着いて、ゆっくり読んでください。
対象読者は僕と同じようなビギナーです。
変なところで躓かないコツは焦らないこと、これに尽きます。



1.ダウンロード

ではまず、STLPort をダウンロードしてきます。
ここから最新版をダウンロードできます。


2.解凍

ダウンロードしたら解凍します。好きなところに解凍してください。
僕は、”C:\lib"フォルダを作成して、その中に STLPort-5.1.5 フォルダをそのまま入れました。
これからインストールが終了してからもずっと同じ場所に存在することになるので、
今のうちにきちんと整理された場所に移動してください。



3.ファイルを開く

まず、STLPort を解凍したフォルダに入っている README ファイルを開いてみます。
拡張子がないので、.txt なりを付け足すか、プログラムから開くでテキストエディタを指定します。

・最初の数行抜粋

**********************************************************************
* README file for STLport 5.0 *
* *
**********************************************************************

This directory contains the STLport-5.0 release.

What's inside :

README - this file
INSTALL - installation instructions



中を見ると…ゲッ!英語!!!
嫌ですね。受験以来使っていない英語を見るのは僕も嫌です。
ともあれこのファイルは読む必要はありません。
とりあえず、テキストファイルじゃなかろうが、README みたいな名前のファイルは
テキストとして開ける、という事実を認識することが大事。

次に、同じフォルダにある INSTALL というファイルを開きます。
斜め読みで結構ですので、流し読みしてください。
ほら、辞書さえあればインストールできそうな気がしてきませんか?
情報はそこらじゅうに転がってるわけです。英語圏の人はうらやましいですねー。



4.STLPort のインストール

先ほど開いた INSTALL ファイルを見てください。

・一部抜粋(上の方)

==== Unpacking and installing STLport ==========

1) Unpack STLport archive to a directory accessible during compilation.
NOTE: DO NOT overwrite header files coming with the compiler, even if you made
a backup - this won't work! Most probably, you've already unpacked the archive before
reading this file though ;)


『コンパイル中アクセスできるディレクトリに解凍してね。
ただし!バックアップ取っててもヘッダファイルは書きかえてはいけません!!
どうせあなたは解凍したばかりでろくにこの説明文も読んでいないのでしょう?』
まぁ要約するとこんな感じになるのかと。英語わかんないんで、真に受けないでください。

ここに書いてある内容が、2.の内容です。
引き続き INCLUDE ファイルを見ていきます

2) Make sure "stlport" directory of this distribution comes before compiler's one
in your include paths when you compile the project.

Note: for SunPro CC 5.0 and higher, there used to be special directory "stlport/SC5"
this is now obsolete, please make sure you do not use it anymore.



インクルードファイルに、STLPort を解凍したフォルダに入っている"stlport" フォルダを入れます。
STLPort をビルドしない人のみこの作業を行なってください!
たしか、ビルドするときに不都合が生じたような気がします。

今回は僕の環境を基準に話しているので、使用するコンパイラ(IDE)はVC++8です。
VC++8を起動して、「ツール」→「オプション」→「プロジェクトおよびソリューション」
→「VC++ ディレクトリ」を選択します。
ここにあるインクルードファイルに、”stlport”を追加します。
INSTALL ファイルの(3)でも書いてありますが、サブフォルダ”stlport"の名前は変更しないでください。
僕には何が起こるのか分かりません。何か不都合があるようです。
これでひとまずインストールは完了です。
が、このままにしておくと色々不都合が生じます!
理由はすぐ説明しますので、次の作業に進んでください。



5.設定ヘッダ(?)の編集

またまた INSTALL ファイルを見てください

・(4)の IMPORTANT 付近

additional compiler components (for Metrowerks), before they can use their
command line compilers (see doc/README.xxxx for additionnal inrformation).

IMPORTANT:

If you DO NOT plan to use STLport iostreams and/or locale implementation but just
the STL, you do not have to build the library.

If you have decided to disable STLport iostreams and locale using _STLP_NO_IOSTREAMS
configuration macro in stlport/stl/config/user_config.h, you may stop reading here.


さて、インストールも終盤を迎えます。
IMPORT のすぐ上に、"doc"フォルダのREADME.xxx を見て、と書いてあります。
これまで同様このファイルを開いてということです。
ということなのですが、移動する前に IMPORTANT を読んでみます。

『STLPortの内、あくまでSTLの部分だけを使用したいのであれば、
STLPortのビルドの必要はありません

おめでとう!!
vector や bind1st, STLPortの独自拡張である rope や hash_map を使いたい方の冒険はもうすぐ終了します!!

そのための作業が、設定ヘッダ(?)の編集です。
引き続き STLPort をビルドする方も共通の作業になります。

まず”stlport/stl/config"に移動してください。

ここには、様々な設定をするためのヘッダが集められています。
僕にはそのほとんどの用途が分かりませんが(^ ^;

重要なのは2つ。
1.STLPort のメモリリークを防ぐための設定(共通)
2.STLPort 付属の iostream 等(STL以外)を使用しないようにする(ビルドしない人)

1.は「STLPort メモリリーク」でググっていただければすぐ分かります。
設定さえすれば別に深刻な問題でも何でもありません。

2.について。これが4.で不都合が生じるといった理由です。
include ファイルにSTLPort を設定すると、STLPortの iostream 等が優先的に使用されます。
が、STLPort をビルドしないと その iostream 等が使えないため、それらを使用するコードで
コンパイルエラーが発生してしまいます。


まず1.の設定について。"doc/FAQ"ファイルを開いてください。
Q6.2、A6.2 にメモリリークの改善方法が載っています。
"stlport/stl/config/host.h"ファイルにある

#define _STLP_USE_NEWALLOC
#define _STLP_USE_MALLOC
#define _STLP_LEAKS_PEDANTIC

どれか一つのコメントアウトを解除して有効にすると、
メモリリークが解消するそうです。発見の経緯と微妙に詳しい説明。



次に、ビルドをしない人のみ行なう作業です
この操作については INSTALL (4)の IMPORTANT でも書かれています。
"stlport/stl/config/user_config.h"ファイルを開いてください。

このヘッダにある

#define _STLP_NO_IOSTREAMS 1

のコメントアウトを取って有効にします。
つまり、STLPort の iostream を使用しない設定にするわけです。

インストールのみの方、お疲れ様でした!!!
これでSTLPort を用いたプログラミングができるはず!!!
できなかったら連絡下さい!!!!!



6.STLPort のビルド

STLPort の機能を骨の髄まで使い尽くしたい方々は、まさにこれからが山場です。
INSTALL ファイルを見てください。

==== Building STLport iostreams library ==========

Below are step-by-step instructions to build STLport streams library. This is a general
build process description, for a more detailed one check README files in the doc folder:


物語もついに後半戦、INSTALL ファイルもビルドの章に突入しました。
ただ、もうここには有益な情報がほとんどありません。
次は、"doc"フォルダにある"README.xxx"ファイルが頼りになります。
このファイルの拡張子部分が自分の環境と合うものを開きます。

僕の場合はVC++ ですので、”README.msvc”です。

ファイルを見てみましょう

=============
Prerequisites
=============
To build and use STLport you will need following tools and libraries:
- Microsoft Visual C++ 6.0 with at least Service Pack 5 or any higher
version.

===================
Configuring STLport
===================
In a console window go to the STLport build/lib folder. Run

configure --help

This command will present you the different available build options. Just follow
the instructions to set STLport configuration according your needs. The only
mandatory configuration is to declare what is the compiler you are going to
use, for MSVC 6 it is:

configure -c msvc6



上は動作環境、下は環境設定の方法が書いてあります。
幸いにもSTLPort は、環境設定を自動で行なってくれるため、私たちが苦労する必要はほとんどありません。
まぁ、僕は苦労しましたけど(^ ^;

説明通り、まずはコマンドプロンプトを実行します。
で、”C:\インストールしたフォルダ\STLPort-5.1.5(変更可)\build\lib"に移動します。

まずは説明通り"configure --help" を実行します。(""は必要ない)

"-c " or "--compiler "
Uses specified compiler to compile STLport. The following keywords
are available:
msvc6 Microsoft Visual C++ 6.0
msvc7 Microsoft Visual C++ .NET 2002
msvc71 Microsoft Visual C++ .NET 2003
msvc8 Microsoft Visual C++ 2005
icl Intel C++ Compiler
evc3 Microsoft eMbedded Visual C++ 3 (*)
evc4 Microsoft eMbedded Visual C++ .NET (*)
evc8 Microsoft Visual C++ 2005 compiling for CE
gcc GNU C++ Compiler (MinGW package)
dmc Digital Mars Compiler
bcc Borland C++ Compiler


前半部分にこのような文字が出てきたと思います。
見覚えのある名前がありませんか?
Microsoft Visual C++ 2005 は"msvc8"というコマンド名だということです。

つまり、最終的なコマンドは "configure -c msvc8"
もしくは "configure --compiler msvc8" となるわけです。
これをそのまま打って実行します。

・実行結果の下3行


Please type "nmake /fmsvc.mak" to build STLport.
Type "nmake /fmsvc.mak install" to install STLport to the "lib"
and "bin" folder when done.


"nmake /fmsvc.mak install" を実行するのですが、ちょっとまって!!

落ち着いて、まずはその場で"echo %include%" というコマンドを実行してみてください。

C:\Program Files\Microsoft Platform SDK\Include;C:\Program Files\Microsoft Visua
l Studio 8\VC\INCLUDE;


このような結果が出ていればOKです。"nmake /fmsvc.mak install"を実行してください。
たぶん成功します(笑

このようにならなかった人。たとえば結果が"%include%"だった人。
まぁものは試しですから一回失敗してみましょう。
"nmake /fmsvc.mak install" を実行します。

おそらく、"fatal error C1083 : include ファイルが開けません"
というエラーとともに、なにがしかのヘッダーファイル名が表示されると思います。
僕は"ctime"でした。
原因は、include ファイルが開けないこと、です(^ ^;

成功している人の echo %include% の結果を見て分かるとおり、
ヘッダファイルのある場所をきちんと示しておかないとコンパイルエラーになってしまうのです。

ctime は"C:\Program Files\Microsoft Visual Studio 8\VC\include"フォルダにあります。
これを使えるようにするコマンドが、
"C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"
です。このvcvars32.batファイルは、今開いているコマンドプロンプトでのみ
上述のincludeフォルダを使用可能にします。
echo %include% で確認できますので、試してみてください。

さて、これでコンパイルできるでしょうか?
もう一度"nmake /fmsvc.mak install"を実行してみると…。

今度は、"windows.h"が必要だと言われませんでしたか?
僕は言われました。
"windows.h"は、PlatFormSDK をインストールしないと標準では入っていません。
インストールしてある場合、"C:\Program Files\Microsoft Platform SDK\include"フォルダにあります。
これを使えるようにするコマンドが、
"C:\Program Files\Microsoft Platform SDK\SetEnv.Cmd"
です。これも同様に、今開いているコマンドプロンプトでだけ、上述のインクルードフォルダを使用可能にします。

これで準備は整いました。
"nmake /fmsvc.mak install"を実行してみましょう。
うまくビルドされるはずです!!!!

ビルドした人は、VC++2005のインクルードファイルに"stlport",
ライブラリファイルに、"lib"フォルダを設定して完了です。お疲れ様でした。



7.最期に

正直、今回のSTLPort のインストール手順を書くにあたって、
操作手順だけを列挙する方法とかなり迷いました。
最終的には、解答に至る手順が分からないとバージョンアップのたびに分からなくなってしまうのでは?
と思い、自分の経験をそのまま書いてみることにしました。
僕はSTLPort のインストールに四苦八苦したのは良い経験だったと思っています。
そんな経験を僕のような人に少しでも共有していただけたら幸いです。
STLPort のドキュメントSUGEEEEEEEEEEEEE!!!!


ちょ、今までの時間返せよww
ドキュメントとヘルプってこんなに親切だったんですね。
読むのに時間がかかっても、ネットで無駄に調べるより断然早い。
日本語の解説ないから最新版は諦めようかと思ってました。諦めないでよかった。

今まで英語を毛嫌いしてきたのでこのドキュメントとヘルプが
どの程度の水準なのか分からないですけど、これはいいですね。

STLPort のインストールとかビルドが出来ないっ!
って人は、一度ドキュメント読んでみると良いかもしれません。

/doc/README.xxxx (xxxx はコンパイラの種類)
をテキストエディタで開くだけです。
公式サイトのドキュメントは古かったような気がするんですが、
こっちはダウンロードしたバージョンに即した説明が書いてあります。

特に現在、STLPort-5.x の日本語解説が少ないと嘆いている人は
一度辞書片手にチャレンジしてみてはいかがでしょう。

少なくともインストールとビルドに手間取ることはないような気がします。
英語アレルギーが少し和らぎました。何事も経験ですね