2011年04月05日


広告


SNES9X最新版をPSPに移植してみる(5)

サウンドはオフだし、コントローラの実装も未、もちろんGUIもまだありませんが、最低限のPSP向け実装が完了したので、ここからmakeが完了しオブジェクトが作成されるところまで行ってみたいと思います。

●/usr/local/pspdev/psp/sdk/include/pspiofilemgr_stat.h:69: error: 列挙子リストの最後にカンマがあります

PSP関連のヘッダファイルをincludeしてコンパイルすると、上記の様なエラーが出ることがあります。これは、読んだままなのですが、以下の様に列挙子や構造体のメンバ等の最後がカンマで終わっている場合にエラーになります。

{a, b, c, }

C言語で上記がエラーになるのは正しいです。ではどうするかというとgcc(g++も同じ)の拡張機能を使います。gccでは、特に指定しなくてもこの拡張機能が有効で、列挙子の最後にカンマがあってもエラーになりません。逆にエラーになる場合は、gccの拡張機能を止めるオプション-pedanticが有効になっているはずです。
Makefileを見直してみると、確かにCCFLAGSの中に-pedanticがありましたので、削除しておきます。

●リンク時のエラー

各ファイルのコンパイルが終了し、なんとかリンクフェーズまでたどり着いたのですが、ものすごい量のエラーが。それもC++に関するエラーだらけです。よく見るとpsp-gccでリンクしようとしているので、psp-g++でリンクするように変更します。

CC = $(CXX)


●sceGu関係のリンクエラー

build.makの中では、pspguのライブラリはリンク指定してくれないのでMakefileのbuild.makをincludeする前に以下を追加する

LIBS = -lpspgu


●libc関連のリンクエラー

リンク指定では、libcをリンクするようになっているはずなのに、なぜかエラーになる。とりあえず明示的に-lcをつけてlibcをリンクするようにする。理由がよく分からないので対症療法ですが。

LIBS = -lpspgu -lc


●relocation truncated to fit: R_MIPS_GPREL16 against `typeinfo for int' のようなエラーがでる

これは、ググってみると、mips固有のコンパイルオプション-G numにnum 0で指定すればよいとのことで、MakefileのCCFLAGSに-G0を追加する。
これはコンパイルオプションなので、make cleanしてコンパイルからやり直す必要がある。

●Error, no sceModuleInfo section found というエラー。

リンクも終わり、elfファイルの生成までは完了したが以下の様なエラーが発生。

psp-fixup-imports snes9x15281.elf
Error, no sceModuleInfo section found
make: *** [snes9x15281.elf] エラー 1
hissorii@MBA:~/src/snes9x-1.52.81-psp/psp$

main()関数の前あたりに以下のコードを追加する。意味はよく分かりません(オイ)。あわせてpspkernel.hもincludeするようにします。

PSP_MODULE_INFO("snes9x/1.52.81 for PSP", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);


●とりあえずオブジェクトが完成

そんな訳で、適当に修正したところも多々ありますが、EBOOT.PBPができあがりました。サイズが3Mぐらいあります。
この後は、psplink経由でPSP実機でのデバッグを行います。




posted by ひっそりぃ at 2011/04/05 15:52 | Comment(0) | TrackBack(0) | SNES9X for PSP | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。