N2-Works
WEB企画・制作/システム開発 大阪拠点

AndroidNDKでcppファイルを使用する時の注意

TIPS本の内容を終えて、自分用のライブラリの作成を開始しました。

ライブラリの作成方法が3種類ほど掲載されていましたが、ライブラリのメンテナンス方法が(自分的に)楽そうな「Jar+共有ライブラリ」のやり方を選択することにしました。

この方法ではJNIの命名規則に沿った関数名をJAVA側のクラスでラッピングできるので汎用的だと思います。

PrebuiltLibraryは既存のC/C++ライブラリを導入する、またはnativeから呼び出す前提な場合に有用だと思います。

それでJarファイルと共有ライブラリを作成して、テストアプリでデバッグしてみたのですがうまく動作しません。

ログを見るとライブラリは読み込んでいるようですが、HelloWorldシンボルが読み込まれていません。

No implementation found for native Lnet/n2works/n2libs/N2Libs;.HelloWorld ()

どうやらcppでライブラリを作成したのでシンボル名がC++用にコンパイラ側で変換されていたようです。

「extern "C"」とすることで解決しました。

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT void JNICALL Java_net_n2works_n2libs_N2Libs_HelloWorld(JNIEnv *env, jclass clazz)
{
}

#ifdef __cplusplus
}
#endif

[Android]2012年12月03日 21時35分19秒

※1000文字以内で入力してください

captcha
TOP