なんとなく、思いつきで書いてみました

異機種間開発環境整備計画[i]

 

written by Set

 

「あれもこれも目移りします~、選ぶだけで悩みます~♪[ii]

とゆーわけで、M$-Window$が嫌いだけど、仕方なく[iii]使ってるって開発者の方いらっしゃいますね?[iv]

そんなあなたにお送りします、異機種間開発環境整備計画ですっ!

いちおう、C~C++な方を対象にさせていただきますねー。

動作は、ゲーム機なWindow$、次世代かもしんないLinux、伝統と格式?なMacで動けばいーや、な考えだけど、MacはMac OS XでBSD。狭い範囲だね。

 

めにうはこちら。

1.        FOX - Free Objects for X

2.        SDL - Simple Directmedia Layer

3.        NTL - Number Theory Library

 

1.        FOX - Free Objects for X

名前の通り、X-Window用のToolKitなんですが、M$-Window$でも使えます[v]

似たようなところに、Gtk+さん、QTさん、wxWindowsさん、FLTKさん、ほか。

で、FOX君の利点。

l         日本語が使える。(Unicode使用)

l         Window$版だけ商用とか言わない[vi]

l         C++な気分が味わえる。

l         実はGtkのWrapperだった!って事がない[vii]

l         軽い[viii]

と、メリットが多そうです。いや、WinAPI直叩きとか、MFCとかいう特定のアーキテクチャと心中するのが嫌なだけですが[ix]

ま、FOX使う人だけ続きを読んでもらいましょう~。

l         インストール方法

まず、私含む、Window$-BorlandC++な方を対象に。

壱)     オフィシャルHPからソースをげっと+解凍[x]

弐)     src\Makefile.bc で Makeる。[xi]

参)     完成品(fox.lib)を、bcc55\lib とか、bcc55\lib\USER に放り込む[xii]

四)     include\*.h を、bcc55\include\FOX にコピる[xiii]

伍)     終わる。

と、こんな感じで。あとは使うだけ。

Cygwinな方は、次のようにしてもらえばOKだと思う[xiv]

壱)     ソースをげっと+展開。(上に同じ)

弐)     ./configure; make; make install[xv]

参)     終わった…

Linuxならば、rpmとかdebなパッケージがあるので、勝手にしてくれ[xvi]

 

l         使い方

つまりはコンパイル方法。ここでは2種類のコンパイラを考えておく[xvii]

n         Borland C++

n         GNU gcc ( g++ )

基本方針としては、ライブラリ(fox.lib/libfox.a)をリンクして、FOXのヘッダ(bcc55\include\FOX)を読むようにする[xviii]

n         Borland C++ な場合

コンパイル時のオプションには次のものを含めておくと、らっきー。

-w-par w-csu w-aus

       特定のWarningを抑える。文献にはコレがかいてあったが…どうやらFOXには潜在的な鰐[xix]が住んでいるようである。

-DWIN32

       Windowsアプリとゆーことを示す、#define文です。

-DUSE_UNICODE

       UNICODEをソース内で使っている、という意味、なはず。

-D_WINDOWS

       未調査。FOXで使っているのか、自分用にWinだけで使う部分を制御させるものなのか、いまいち不明。

 

リンク時だと、こんなものが。

-laa

       DOS窓を表示させない。

 

で、まとめると次のようなコマンドになる。

bcc32 I%BCC55%\include\FOX L%BCC55%\lib\USER -w-par w-csu w-aus -DWIN32 -DUSE_UNICODE -D_WINDOWS 5 O2 laa fox.lib hoge.cpp foo.cpp bar.cpp

 

Makefileを書くと幸せになるくらいに長いです。

n         GNU gcc ( g++ )

あんまり変わりません。というか、UnixでFOXる人はこんなの読まなくても自力でどうにかやれるくらいではないでしょうか?

Cygwinな環境を例に、コマンドを撃つと…

g++ -I/usr/include/FOX L/usr/lib/FOX DWIN32 DUSE_UNICODE D_WINDOWS O5 laa lfox hoge.cpp foo.cpp bar.cpp

と。UNIXerなら、-DWIN32消して、-D_WINDOWSを好きに変えればOKなんでしょうねー[xx]

              で、FOX使ったのコンパイル時の注意点を最後に。

              FOXでOpenGL使ったときは、ライブラリを喰わせるのを忘れずに[xxi]

 

 

2.        SDL - Simple Directmedia Layer

WinAPIとかDirectXをぶっ飛ばす、低レベルAPI群。

どんなことが出来るかはオフィシャルHPを見てもらって。

具体的には、Winなゲームの大半をこれで書き換えが出来るそうな。

実際、とあるゲーム実行エンジン[xxii]SDLで書いたそうな[xxiii]

まだ、Linux,Win32,BeOSくらいしか正式対応はしてないが、MacOS X, Amiga, Solaris, Irix, BSD,を予定してるようだ。

ま、ここを読むあなたは、DirectXなんぞ糞喰らえな、聖人君主[xxiv]でしょうから。

とりあえず、入れ方と使い方を書いておきますか。

n         インストール

まず、Linuxから。・・・・・・・・・、rpmやdebがある。(終

気を取り直して、Win-BCC環境では?

壱)     オフィシャルHPからソース、DLL、DevelLibをげっと+展開。

弐)     VC用のsdl.libは廃棄処分。自分でDLLからLIBを作ります。

implib a c sdl.lib sdl.dll

オプションの a は、VC互換な名前で、-c が、大文字小文字を厳密に[xxv]

参)     ヘッダ、ライブラリ、DLLは、所定の場所に放り込む。

例:bcc55\include\SDL、bcc55\lib\USER、bcc55\bin

四)     ソース書庫から、SDL_main.cを取り出して、コンパイル(のみ)して、ライブラリを作る。

           bcc32 -I"d:\tool\borland\bcc55\include\sdl" -c -O2 -5 -a8 -tW -tWM -Hc -k -y -v -Vx -Ve -w-par -n SDL_main.c

              tlib SDLmain.lib +SDL_main.obj ,main.txt

で、これも置く。

なんでこんなことをやるかは、各自宿題。次の授業[xxvi]までに調べておくように。

n         コンパイル

特に注意すべき点は無い。むしろ必要に応じて変えるべきなので、一概には言えない。

あえて言えば、-DWIN32はいつもどおりに必要だし、OpenGLる時には、Win環境では、Windows.hを入れないとこける。

ビデオ、オーディオ関係では、それなりに必要な-Dオプションがあるのを忘れずに。

そうそう、さっき作ったSDLmain.libをリンクしないと動かないのは注意。

 

3.        NTL - Number Theory Library

UnixとWinしか対応してないように思えるが、気のせいだろう。MacOS Xなら動くはずなので、問題なし[xxvii]

概要としては、多倍長数演算ライブラリに、いっぱい機能をつけたもの[xxviii]

紹介文では、「数論用ライブラリ」だそうで…。でも製作者様は、暗号屋さんなんで、「暗号用のライブラリ」だろ?という意見もちらほら[xxix]

具体的に私が思いつく用途は…

       RSA暗号、ElGamal暗号、Rabin暗号、逆数暗号[xxx]とかの実装…

さて、気を取り直して

n         インストール

壱)     ソースを取り寄せます。

弐)     config.h改造計画。

#define NTL_LONG_LONG

#define NTL_STD_CXX

#define NTL_GMP_LIP

#define NTL_CXX_ONLY

あたりが改造対象。ただし、下手に触るとこける[xxxi]

参)     MakeDesc/ で、bcc32 *.cpp; ./MakeDesc.exeとする。

そうすることで、自分の環境に適したMakeDesc.h が生成できる。

出来たファイルを、include/ に配置。

四)     include/ を、bcc55/include/NTL にコピる。(config.hとMakeDesc.hも)

伍)     src/で、bcc32 -O2 -c -w- *.cpp る。

つまり、ソースを全てコンパイル(だけ)する。鰐は多すぎるので消す。

六)     全てのオブジェクトをリンカでライブラリにする。

1.        (cygwinが使えれば次のシェルスクリプトを実行して…)

#!/bin/sh

rm ntl.rsp

for file in `ls *.obj`

do

       echo "+${file} &">> ntl.rsp

done

2.        ntl.rsp の最後の & を消す。// 重要。

3.        tlib ntl.lib @ntl.rsp

とリンクして、ntl.libを作る。

七)     所定の場所に、ライブラリを放り込んで終わる。

Unixみたいな環境なら、configure;make;make installればOK

Cygwinでは、configureに--disable-sharedが必須です。

n         コンパイル

-w-inl[xxxii]

これは、使いたいオプション。NTLはreturn文をインライン展開したがるので、この鰐が出現する。

-lgmp[xxxiii]

       NTL with GMPなことをやっているときには必要。忘れがちなので警告。

例としてはー

bcc32 5 O2 w-inl ntl.lib hoge.cpp

g++ -O5 lntl lgmp hoge.cpp

かな?

 

最後に。

この文章をパチたりするのは、半径100km以内の人の良心の総和くらいにおまかせします[xxxiv]

長々しく、読みづらい文章をここまで読んでくださった方、結構感謝します。

そして、いかなる苦情やその類は受け取りません[xxxv]。そーゆーの書く暇があるなら、1行でも多くソースを書け!

あと、M$ Wordで書いちゃってごめんなさい。手で書くの面倒なんですもの~

 



[i] クロスプラットフォームとか言う、ハイカラな存在。

[ii] ちょうどこの行を書きはじめた時のBGMより抜粋。(死

[iii] いろいろ理由があるんです。ゲームとか、ゲームとか、ゲームとか。

[iv] そこ、同意を求めるな!

[v] 詳細はOHPなんだが、Linux,BSD,Solaris,DEC,Windows(DOS&NT)など。

[vi] 誰かさんのことですよ、QT君?

[vii] 誰のことだろうね?、wx君?

[viii] 本人談

[ix] とか言って、Borland信者だったりするあたり、信憑性が無いかも。

[x] これがわからないなら、PCを粗大ゴミに出してしまえ!ってレベル。諦めろ。

[xi] cd src; make –f Makefile.bc; あたりでやって見れば?

[xii] 場所は適当に。

[xiii] md bcc55/include/FOX; cp include/*.h bcc55/include/FOX みたいな雰囲気に。

[xiv] 思うだけ。configureのオプション周辺をいじってこけてから、触ってない。

[xv] ./configure && make && make install とするとゆー文献も。(前の失敗したらmakeらない)

[xvi] 無責任な話でした。debianな環境は手元に無いし、redhatは手元から離れればあるけど…

[xvii] vcは存在自体が特定のアーキテクチャと心中してるので論外!

[xviii] それくらいは理解してるものとして話を進めようか?

[xix] Warning

[xx] あくまで、予想。

[xxi] いや、一応。まぁ、忘れたとしても、知らない人はいないし。…知らない人は対象外。

[xxii] NScripter

[xxiii] ONscripter

[xxiv] 聖人君主はそんなこと言いません。

[xxv] と思う。重要なのは経過ではなく、結果。(逃

[xxvi] 次回の授業は未定です。

[xxvii] たぶん、問題はおおいにある。

[xxviii] と、私は認識してみた。行列計算とか、ベクトル、多項式も扱えるようですが…

[xxix] このお方の意見。

[xxx] メジャーどころで唯一の日本人が発明した暗号。別名、黒澤暗号。

[xxxi] おもいっきり実話。

[xxxii] bcc32での話。

[xxxiii] gccとかでの話。

[xxxiv] 無変更でそのままパチるなら、地の果てまで追っかけてどつき倒すくらいの気分。

[xxxv] メールアドレスも書きませんしねー。