ページ 1 / 1
GCCのクロスコンパイル環境の構築
Posted: 2008年12月30日(火) 18:14
by tk-xleader
こんにちは、tkmakwins15です。
質問ですが、Windows XPでPentium上のFreeBSD用の実行バイナリを生成しようと思っているのですが、どうしてもうまくいきません。
とりあえず、以下のものをダウンロードしました。
MinGW(最新版だと思います。)
MSYS (バージョン1.0です。)
binutils-2.19.50.tar.bz2
gcc-core-4.3.2.tar.bz2
newlib-1.17.0.tar.gz
また、MinGWとMSYSのインストールは成功しています。とりあえず、標準C++の範囲内で、
#include<iostream>
int main()
{
std::cout<<"Hello World!"<<std::endl;
return 0;
}
というソースをtest.cppとすると、DOSプロンプト上で、
g++ test.cpp
とコンパイルすると成功して、実行結果も大丈夫でした。また、同じくDOSプロンプト上で、添付した画像のようにすると、しっかりとC:\CTEST\testboost.cppが消えました。
ですが、sh上でbinutils-2.19.50.tar.bz2を展開したディレクトリへカレントを設定し、configureコマンドを打っても、変なメッセージ(下の投稿でスクリーンショットを掲載します。)が出るだけで、全く成功していないようなのです。
ダウンロードファイルが足りないのでしょうか、それとも僕の設定がおかしいのでしょうか?ご教授ください。
お願いします。
Re:GCCのクロスコンパイル環境の構築
Posted: 2008年12月30日(火) 18:18
by tk-xleader
添付した画像がconfigure実行時のメッセージです。
Re:GCCのクロスコンパイル環境の構築
Posted: 2008年12月30日(火) 19:08
by Justy
似たような症例があるようです。
このあたりを参考にして、rebaseを差し替えるとどうなりますか?
情報技術を勉強する人のブログ:
MSYS 1.0.10 のインストール時に Couldn't reserve space for cygwin's heap,
うんたら Win32 error 6 というエラーが出て失敗した時のメモ
ttp://miteidesu.seesaa.net/article/110789246.html
VistaでMSYSが変なエラーを吐いて突如動かなくなる件 - 駄目日記っぽぃ。
ttp://d.hatena.ne.jp/kazy/20080310/p1
WinAVR and Windows Vista - MadWizard.org
ttp://www.madwizard.org/electronics/articles/winavrvista
Re:GCCのクロスコンパイル環境の構築
Posted: 2008年12月30日(火) 21:38
by たかぎ
今回の問題とは直接関係ありませんが、MinGWでGCCをコンパイルするには、GCCのソースにパッチをあてる必要があります。Cygwinを使う方がよいと思いますが、いかがでしょうか?
また、単にFreeBSDのコンパイラが欲しいだけなら、VMwareやQEMUを使ってFreeBSDをインストールした方が確実です。
Re:GCCのクロスコンパイル環境の構築
Posted: 2008年12月31日(水) 09:34
by tk-xleader
Justyさん、たかぎさん、回答ありがとうございます。
とりあえず、rebaseを差し替えてみました。パッチについては今から調べてみます。
>FreeBSDのコンパイラが欲しいだけなら、VMwareやQEMUを使ってFreeBSDをインストールした方が確実です。
どうせならGCCのことについても勉強しようと思いまして…
また、追加で質問なのですが、Pentium上のFreeBSDのGCC構築ということになると、ターゲットの指定方法は、
--target=i386-pc-FreeBSD7
という指定でいいのでしょうか?
http://f1.aaa.livedoor.jp/~arai/hos/memo7.html
を参考にしています。
Re:GCCのクロスコンパイル環境の構築
Posted: 2008年12月31日(水) 10:15
by たかぎ
> また、追加で質問なのですが、Pentium上のFreeBSDのGCC構築ということになると、ターゲットの指定方法は、
> --target=i386-pc-FreeBSD7
> という指定でいいのでしょうか?
小文字でしか試したことがありません。
--target=i386-pc-freebsd
大文字交じりがOKだったとしても、後々コンパイルする際にi386-pc-FreeBSD7-gccと打たないといけないので面倒です。
ところで、gcc-coreだとCしか使えませんが、それでよいのでしょうか?
また、glibcではなくnewlibを選んだのは意図的ですか?
Re:GCCのクロスコンパイル環境の構築
Posted: 2008年12月31日(水) 10:25
by tk-xleader
>ところで、gcc-coreだとCしか使えませんが、それでよいのでしょうか?
>また、glibcではなくnewlibを選んだのは意図的ですか?
うーん、参考先がnewlibを使っていたので、そうしただけです。glibcというのでもいいのですね。
>gcc-coreだとCしか使えませんが、それでよいのでしょうか?
とりあえずgcc-coreを入れて、後でC++のフロントエンドを導入するようにしてみます。
計画は、CGIプログラムを作るとして、boostのxpressiveとfilesystemを使うことにすることです。
こうすればWindowsバイナリとしてコンパイルした際に、Windows上のApacheでCGIそのものの実験は可能だと思いまして…
Re:GCCのクロスコンパイル環境の構築
Posted: 2008年12月31日(水) 10:41
by たかぎ
> とりあえずgcc-coreを入れて、後でC++のフロントエンドを導入するようにしてみます。
最終的にC++を使うのであれば、最初からビルドする方が得策です。
> 計画は、CGIプログラムを作るとして、boostのxpressiveとfilesystemを使うことにすることです。
やはりCGIですか...
boostを使うなら、なおのことC++は最初から構築すべきです。
Re:GCCのクロスコンパイル環境の構築
Posted: 2008年12月31日(水) 10:56
by tk-xleader
とりあえず、binutilsのビルドすら終わってないので、何とかしようと思います。
いまやってみたのですが、どうもうまくいきません。とりあえず、config.logが残っていたので、その内容をコピペします。(コピペできないほど長いので、拡張子を.txtに変えて添付します。)
CGIというのもあるのですが、将来的にはGNUのソフトウェアを勉強したいので、それもかねてクロスコンパイル環境を構築する勉強をしています。
Re:GCCのクロスコンパイル環境の構築
Posted: 2008年12月31日(水) 22:06
by tk-xleader
うーん、binutilsのビルドがぜんぜん成功しません。
僕が実行した手順としては、
1.コマンドプロンプトを実行する。
2.shを実行する。
3.sh上でbinutilsを解凍したディレクトリへカレントディレクトリを移す。
4.mkdirコマンドでi386-freebsdディレクトリを作成。
5.cdでi386-freebsdディレクトリへカレント移動。
6.次のコマンドでconfigureを実行する。
../configure --target=i386-pc-freebsd --host=i386-mingw --prefix=../i386-freebsd
ですが、ここでなぜか、添付画像のような状態になり、全く前に進めません。とりあえず、
GCC cross compile MinGW msys
で検索して見たのですが、どうしてもWindows->FreeBSDのクロスコンパイルの情報は見つからず、とても困っています。
何かよい対策はないでしょうか。
もうひとつ質問ですが、ビルドに成功した場合、どのディレクトリにどのようなファイルが生成されるのでしょうか?それもご教授ください。お願いします。
【雑談】シューティングゲームの館でSTGを作ってみました
Posted: 2009年1月10日(土) 00:41
by Libra
昨年、2008年の7月の夏時点でのverの作成したSTGです。
ttp://www.e-kuraberu.net/uploader/src/kuraberu7791.lzh.html
PASS:dxlib
仕様:大学祭用に作成したので、終了メニューはありません。終了するときはESCキーを押してください。
ゲーム中の細かい仕様は添付ファイルの中の「読んでね説明書」の中にあります。読まないと、恐らくショット関係で困ります。
参考にしたページ
・ゲームプログラミングの館
・シューティングゲームの館
(作成当時はまだ龍神録の館がありませんでした)
制作期間(アップロードしたゲームのverの時点):6ヶ月
当時のプログラミングの理解度:初心者基準(◎:完璧、○:大体OK、△:とりあえず使える、×:使えない)
ループ○、条件分岐○、関数△、構造体△、ファイル入出力×、マクロ△
ソース量:3万行くらい
失敗した部分
ファイル出入力が出来なかったため、敵出現データが全部ソースに記載されています。これだけで数千行になってしまった。また、キャラ会話部分の言葉もソースに全部記載。
ボスの技で「東方にない規格の大きな弾作ってみよう」と考え、作ったのが見事、東方地霊殿の6面スペルと丸かぶりしてしまった苦い思い出も^^;まさか弾幕の色まで被るとは・・・。
作成している方、これからする方の参考になれば幸いです。
Re:【雑談】シューティングゲームの館でSTGを作ってみました
Posted: 2009年1月10日(土) 01:19
by きらりん
楽しく遊ばせてもらいましたw
バグらしいバグも見当たらなかったです。
(でも、気のせいだったのかもしれませんが攻撃避けてたら最後のところが勝手に終っていたような・・・?ゲージを見ていなかったので勘違いだったのかもしれません><)
>>ボスの技で「東方にない規格の大きな弾作ってみよう」と考え
どの弾幕よりもあのガムが一番怖かったです・・・w
まだノーマルしかクリアしてないんでハードやってきますb
Re:【雑談】シューティングゲームの館でSTGを作ってみました
Posted: 2009年1月10日(土) 01:37
by きらりん
>>(でも、気のせいだったのかもしれませんが攻撃避けてたら最後のところが勝手に終っていたような・・・?>>ゲージを見ていなかったので勘違いだったのかもしれません><)
右上にタイムでてますね・・・wきがつきませんでしたwサーセン><
あと、ハードモードをやっていて一度だけ起こったバグがあるんですが赤い中ボスみたいなのが出てくる直前にゲームオーバーして再度ハードをプレイしようとしたときにはじまってすぐに前の回の中ボスの弾幕が若干残ってました。ちなみに当たったら死にましたwしかし、その後意図的にそれを出そうとしても起きなかったのであまり気にするバグではないのかもです。
Re:【雑談】シューティングゲームの館でSTGを作ってみました
Posted: 2009年1月11日(日) 03:20
by Libra
大学祭ということで、締切もあったので、ゲームオーバー時の判定は2日しか時間をかけることが出来なかったので、動作チェックが甘かったです。
難易度ですが、普通と難しいの2種類がありますが、本当は「簡単」と「普通」のつもりで作ってました。難易度難しいという意見があったので、表示難易度の方を1段階上げました。
現在背景の3D化を行っており、このような関数を作りました
・仕様(まだ、無駄部分がありますが^^;)
ポリゴンの頂点情報を格納するための配列を用意する。ポリゴンで表示する3Dはポリゴンの数を2枚とした、四角形を毎回使うこととする。なので、用意する配列はポリゴンが2枚なので、頂点の数は6つ、x、y、z軸それぞれに対して、情報を入れる(表示する画像数×6×頂点情報数)。頂点座標情報はCSVファイルで読み込むこととする。
//変数(Img_t構造体内)
//3D背景用頂点座標
float vertexx[POLYGON_NUM][6],vertexy[POLYGON_NUM][6],vertexz[POLYGON_NUM][6];
float vertexu[POLYGON_NUM][6],vertexv[POLYGON_NUM][6];
int vertexb[POLYGON_NUM][6],vertexg[POLYGON_NUM][6],vertexr[POLYGON_NUM][6],vertexa[POLYGON_NUM][6];
int vertexflag[POLYGON_NUM],vertexvariety[POLYGON_NUM];
※POLYGON_NUM:define、ポリゴンで表示する画像数
void BackGroundDisplay(Img_t *img,VERTEX_3D *Vertex){
int i,j;
int val;
for( i=0 ; i < POLYGON_NUM ; i++ ){
if(img->vertexflag == TRUE){
val=img->vertexvariety;
for(j=0;j<6;j++){
Vertex[j].pos.x = img->vertexx[j]; //構造体にポリゴンのxの値を代入
Vertex[j].pos.y = img->vertexy[j]; //構造体にポリゴンのyの値を代入
Vertex[j].pos.z = img->vertexz[j]; //構造体にポリゴンのzの値を代入
Vertex[j].u = img->vertexu[j]; //構造体に画像表示値uを代入
Vertex[j].v = img->vertexv[j]; //構造体に画像表示値vを代入
Vertex[j].r = img->vertexr[j]; //構造体にR値を代入
Vertex[j].g = img->vertexg[j]; //構造体にG値を代入
Vertex[j].b = img->vertexb[j]; //構造体にB値を代入
Vertex[j].a = img->vertexa[i][j]; //構造体にα値を代入
}
//読み込んだ情報を元に、3D画像を表示
DrawPolygon3D( Vertex, 2, img->gamebackground[va[/url], FALSE ) ;
}
}
}
この方法ならVERTEX_3D構造体の宣言、この関数内で行ってもいいですね^^;;;;
これで、上から見下ろしたような視点にしたい時は、関数内でそれぞれの頂点座標を格納する変数を別に宣言し、頂点座標を引数にし、表示したい角度だけ数値を変化させる関数を作れば、視点変更も出来ます。また、スクロールさせる時は、頂点情報のz座標を減算(手前にスクロールする場合)し、一定位置まで座標が来たら一番後ろのポリゴン座標の位置に戻してやればスクロールする背景が実現出来ると考えてます。(只今作成中)完成のイメージ的には東方花映塚が近いと思われます。
今回アップロードしたゲームはスローの時の処理が上手くいってないです。ボスを倒したときにスローにするのを、毎秒60フレーム処理を毎秒20フレーム処理に変える、という方法でおこなったので、動きがカクカクになってしまってます。これを滑らかにするには、スロー処理フラグを作り、オブジェクトの動作する関数全てにスロー時の処理(距離5動くのをスロー時5分の1にする、弾の時間変数の加算を数フレームに1回にする)にしないといけないと考えました。
Re:【雑談】シューティングゲームの館でSTGを作ってみました
Posted: 2009年1月11日(日) 18:29
by Dixq (管理人)
おぉ~素晴らしい♪
遊ばせて頂きました^^
ステッキみたいな弾幕、早苗さん弾幕みたいできれいですねw
後、弾のバリエーションも多くていいなと思いました。
あと、確かに地霊殿の弾ソックリですねw
あれにあの効果音つけたらどうみても地霊殿にしか見えませんw
私もラスト弾幕の警告表示が、地霊殿の警告表示と似ているのを見て嬉しく思いました。
「全然知らない二人が同じ事を思いついた」
っていうのはなんだかシューティングゲーム制作の奥にある何か神秘的なもn・・(言い過ぎ
シューティング作っていると凝りたくなるのが背景ですよね。
3D関数は使い方がややこしいので、私も出来るだけ解り易い関数を作ろうと努力してるところです。
>3万行
コードが増えてくると大変ですよねw
私も龍神録のコードが数万行だったので、苦労しました。
わかりやすく、かつ短く書くって事も大事ですね^^;
>本当は「簡単」と「普通」のつもりで作ってました。難易度難しいという意見があったので、表示難易度の方を1段階上げました。
気持ちがホントよくわかりますw
製作者って何百回とプレイすることになるので、自分で作ってるとそのゲームがそこまで難しくない気がするんですよね^^;
自分が作ったゲームの難易度を適切に設定するってホント難しい事だと思いました。
龍神録のあの異常な難易度はその産物・・。
次回はその辺も考慮して作りたいと思ってます。
ではLibraさんの次回作期待してます~♪
Re:【雑談】シューティングゲームの館でSTGを作ってみました
Posted: 2009年1月12日(月) 01:10
by karasu
遊ばせていただきました。
むずかしいがその名の通り難しかったです・・・
ガムのところはかなり被弾しました・゜・(つД`)・゜・
私がプレイした中ではバグは無かったと思います。
弾幕もとても綺麗でしたし、ショットタイプによってボムが変わったりととても楽しめました^^
次回作楽しみにしていますw
Re:【雑談】シューティングゲームの館でSTGを作ってみました
Posted: 2009年1月13日(火) 22:14
by Libra
今回アップしたものを改良して、ステージ数を増やしていく方向で作成しています。
現時点で実装
・グレイズ
・ハイスコア等保存
・キーコンフィグ
・メニュー画面
得点アイテムを取った時に、例えば100万点のアイテムを取った時に、スコアの数字がいきなり100万って表示させるのではなく、だらららららーと加算されて増えていくように表示するとか色々工夫してます。
・displayscoreとscoreの二つの変数を用意する。displayscoreは表示する時の得点、scoreが実際の得点。得点アイテムを取った時、scoreの値を取った分の値だけ加算します。次に、displayscoreの値ですが、以下のような例で加算します。
//スコアのずれが1000点以上
if( ( score - displayscore ) >= 1000 ){
dispscore += 1000 ;
}
//スコアのずれが100点以上
if( ( score - displayscore ) >= 100 ){
displayscore += 100 ;
}
//スコアのずれが10点以上
if( ( score - displayscore ) >= 10 ){
displayscore += 10 ;
}
このようにすることで、表示する時の得点の値が一気に加算されず、何フレームかかかって実際の得点になるため、仕様の通りの表示方法になります。