Tuesday, September 24, 2013
Monday, September 23, 2013
Friday, September 13, 2013
Sunday, September 1, 2013
XCode4.6で、Apple March-O Linker Error の対応
cocos2d-x の CCLabelTTF(テキストラベル)を管理するクラスを自作していたところ、途中からコンパイルが通らなくなって困った。何をしたかというと、
1)CCLabelTTF をメンバ変数に持つ自作クラス(SSMsgBoxDQ)を作成。
2)上記クラス内で自作関数(string 対応のprintfなど)を使用しているので、自作関数群を別ファイル(SSlib.h と SSlib.cpp)に抜き出し、SSMsgBoxからヘッダを読み込む。
3)その状態でコンパイル。
すると、ビルドが失敗し、タイトルのエラー「Apple March-O Linker Error」が出た。
linker command failed with exit code 1 (use -v to see invocation)
だそうである。正直よくわからないので、Webで調べてみると、多かったのが「プロジェクトに新規ファイル(この場合"SSlib.h")が認識されていない。ということ。
そこでプロジェクト>BuildPhases の、ビルド対象ファイルに SSlib.cpp が追加されていることを確認。きちんと追加されている。どうやら問題はここではないようだ。クラスからライブラリのヘッダを読み込んでいるのだが、クラスがおかしいのか、ライブラリがおかしいのか???
// DQ風ウィンドウマネージャ // SSMsgBoxDQ.h #include "SSlib.h" // 関数ライブラリ class SSMsgBoxDQ : public CCObject { ...あれこれ修正して悩んだ結果、「ライブラリのヘッダ内に関数プロトタイプだけでなく、関数の実体を定義していた」のが原因だと判明。
それまで、「c++の関数ライブラリを作るのに、プロトタイプと関数定義を別々に書かないといかんのだろうか?面倒だから .h プロトタイプを書かないで関数定義し、.cpp は空っぽにしてみよう。」とやっていたので、そのためにコンパイルが通らなかったのだ。別々に書き直したら、エラー解消。横着はいかんなと反省。。。
以下、関数プロトタイプと関数本体をきちんと別々に記述したもの(ソースの抜粋)です。
// 関数ライブラリ "SSlib.h" string strRepeat(const char* str, int count);
// 関数ライブラリ "SSlib.cpp" #include "SSlib.h" // 繰り返し文字列を得る(マルチバイト対応) string strRepeat(const char* str, int count) { CCAssert(count>=0 && count<255, __FUNCTION__); string sRet; for(int i=0; i< count; ++i){ sRet += str; } return sRet; }
当面の目標
現在、簡単なゲームを作るため、XCode と cocos2d-xを使って色々な実験をしている。
当面の目標:
・XCode に慣れる
新しいIDEって、慣れるまでけっこう苦労しますね。これまでVisualStudioに慣れてたので、XCodeはどうにも覚えることが多くてたいへんだ(;´Д`)
・cocos2d-x の作法に慣れる
新しいフレームワークに慣れるのも、少し時間がかかります。自分の場合、中途半端に難しいことをしようとしてしまうので(汎用性の高いクラスを作ろうと思ったり)、かえってややこしくなる部分があるのかもしれない。
・c++ について、いろいろ思い出す
phpとか VBだと、型だとかメモリ管理にそこまで厳密でなくてもけっこうコードが書けてしまっていた。ので、そういた部分に非常に厳しい c 系の言語作法を思いだすのが本当に大変だ。宣言とか初期化しなくても、いきなり文字列を使えてしまう言語にくらべ、宣言、型変換、メモリ確保、などをきちんと書かなきゃならない言語は自分にとってまだ「面倒」という感じ。勉強始めて2週間くらいだが、ようやく思い出してきた。
・簡単でいいので、「ゲーム」と呼べるものを作ってみる
iPhoneで動く「ドラクエの格闘場」めいたものを、勉強のために作ってみようかなと考えている。今は、CClabelTTF を使って、いわゆるRPGの「ステータス表示」みたいなものを作ろうと奮闘中だ。ステータス表示のための、ラベルを管理してくれるクラスを作成してます。
当面の目標:
・XCode に慣れる
新しいIDEって、慣れるまでけっこう苦労しますね。これまでVisualStudioに慣れてたので、XCodeはどうにも覚えることが多くてたいへんだ(;´Д`)
・cocos2d-x の作法に慣れる
新しいフレームワークに慣れるのも、少し時間がかかります。自分の場合、中途半端に難しいことをしようとしてしまうので(汎用性の高いクラスを作ろうと思ったり)、かえってややこしくなる部分があるのかもしれない。
・c++ について、いろいろ思い出す
phpとか VBだと、型だとかメモリ管理にそこまで厳密でなくてもけっこうコードが書けてしまっていた。ので、そういた部分に非常に厳しい c 系の言語作法を思いだすのが本当に大変だ。宣言とか初期化しなくても、いきなり文字列を使えてしまう言語にくらべ、宣言、型変換、メモリ確保、などをきちんと書かなきゃならない言語は自分にとってまだ「面倒」という感じ。勉強始めて2週間くらいだが、ようやく思い出してきた。
・簡単でいいので、「ゲーム」と呼べるものを作ってみる
iPhoneで動く「ドラクエの格闘場」めいたものを、勉強のために作ってみようかなと考えている。今は、CClabelTTF を使って、いわゆるRPGの「ステータス表示」みたいなものを作ろうと奮闘中だ。ステータス表示のための、ラベルを管理してくれるクラスを作成してます。
bloggerでmarkdown記法のテスト & ソースのハイライト
「Blogger の記事を markdown で記述する」を参考にさせて頂きました。
なお、記事の通りにやってもどうしても「引用文」の背景色が変わらなくて困ったのだが、CSS設定で解決。このページでは以下のようにしています。
ソースコードのハイライト表示は「コードをハイライトする「Code Prettify」ウィジェット」の記事を参考にさせて頂きました。とても便利です。ありがとうございます。
pre { background-color: #dddddd; color: #000000; margin-left: 3%; margin-right: 3%; } code { font-weight: bold; font-size: 1em; line-height: 1.2; }ここからはmarkdownのテスト。
ソースコードのハイライト表示は「コードをハイライトする「Code Prettify」ウィジェット」の記事を参考にさせて頂きました。とても便利です。ありがとうございます。
class Test { public: Test(){cout<<"コンストラクト\n"; m_str="あいうえお";}; void test1(){cout << m_str << "\n";}; private: string m_str; CCLabelTTF* m_label; };
Subscribe to:
Posts (Atom)