Projectのなかのひとのブログ。NDK(r19)について。知って措いた方良い事JNIのCバインディングとC++バインディングはまったく別物APIの名前は同じ挙句にC++版でも名前空間つこうて無かったりで、ありがちなC/C++対応と言いつつ実はCっていうパターンかと思いきやC++バインディングでは同名のAPIでパラメーターの数が違ったり、ポインターのポインターがポインターと参照になっていてAPIを使ったユーザー定義部分のコードをCとC++では変える必要があるなど設計がおかしい。JNIは蛇殺しJNIのJAVAとCの名前空間の結合ルールが馬鹿なのでユーザー定義でsnake_caseのシンボルを使うと死ぬ。Androidで実行してランタイムエラーが出現するまで問題は顕在化しない。この問題に対しsnakerの私は_の代わりに大文字の'X'を使う事にせざるを得なかった。`jni_is_bakuhatsu`は`jniXisXbakuhatsu`として代替した。コンパイラーとは何だったのか未定義のシンボルがあってもコンパイルエラーとかワーニングとか無く、Androidで実行してランタイムエラーが出現するまでtypoすら分からない。標準ライブラリーは非標準C++の標準ライブラリーを標準では使えない。(Application.mkにAPP_STLを明示的に定義する必要がある)C++標準ライブラリーを使う為にはjni/Application.mk(jni/Android.mkでパス指定を特殊化も可能)を作り、APP_STLにstlport_staticないしgnustl_staticを明示的に定義しなければならない。これを定義しないとSTLじゃないのに<string>すら使えない。g++-4.4.3だからC++11の一部機能を使えるとか無かった使えるg++は4.4.3なので-std=c++0xをCXXFLAGSに定義するなどすればC++11な機能も一部使える。-std=c++0xすると<string>がコンパイルエラー吐くのでstd::stringと併用出来ない。stlport_static使用でもgnustl_static使用でも何れにせよ発症する。補足的な事それ、archならarchlinuxならAURにandroid-sdkもandroid-ndkもパッケージがメンテされているeclipseとか全く必要無い。NDKを使おうとしていた学生さんがブログでrefってくれてた&画像付きの解説してくれてたので参考に。Projectのなかのひとのブログ。)CPUとMBの間にゴミが詰まっていてもPCは動く事がある。今回はメモリーの不調の原因でした。(1)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。