Showing posts with label xcode. Show all posts
Showing posts with label xcode. Show all posts
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の「ステータス表示」みたいなものを作ろうと奮闘中だ。ステータス表示のための、ラベルを管理してくれるクラスを作成してます。
Subscribe to:
Posts (Atom)