2013年8月30日金曜日

エラー:Androidでのundefined reference to 'foo()'への対処

AndroidのNDKを使った開発で、undefined reference to 'foo()'が出た場合の対処例のメモ。

1.android.mkのLOCAL_SRC_FILESにfooを宣言しているファイル(例えばfoo.c)があることを確認

LOCAL_SRC_FILES := foo.c


2.(fooがcppファイルで宣言されていて、cファイルからの参照するときにエラーが出る場合のみ) foo()を宣言しているヘッダがextern "C"{}で囲われていることを確認(includeガードをしている場合は最初のincludeでこうなっていることを確認)

extern "C" {
#include "foo.h"
}

3.(別のライブラリとしてビルドしている場合のみ)android.mkのライブラリー関連の記述が正しいか確認

以下のようにfoo.cを含むライブラリーを静的ライブラリとしている場合は、
LOCAL_MODULE := bar
LOCAL_SRC_FILES := foo.c
include $(BUILD_STATIC_LIBRARY)

呼び出し側のライブラリの記述に以下を追加
LOCAL_STATIC_LIBRARIES := bar

共有ライブラリとしている場合( include $(BUILD_SHARED_LIBRARY) )は
LOCAL_SHARED_LIBRARIES := bar



0 件のコメント:

コメントを投稿