NDKコンパイルundefined reference toエラー
, , Android C++ , jni。
.h,.cpp,Android.mk,Application.mk , ndk-build .so , .so "Error: undefined reference to `glGetError'“ 。
.cpp , ,.cpp 。
Android.mk , LOCAL_LDLIBS:= -lGLESv2。
, 。 , 。 , 。
理由:デフォルトでは、src/main/jniフォルダが存在する場合、gradle生成スクリプトはndkコンパイル生成操作を実行するが、コンパイル生成方式は以前のようにndk-buildでAndroidを処理するわけではない.mk Application.mkなどはc/c++コードのコンパイルリンクを行い、一時ファイルパスで新しいmkファイルを再生成しndkコンパイルプロジェクトとするため、logライブラリが正常にリンクされず、定義が見つからない.
解決方法:appディレクトリの下にあるbuild.gradleにandroid{を追加する構成:(android{}に追加することに注意)sourceSets.main{jni.srcDirs=[jniLibs.srcDir'src/main/libs]}はデフォルトのjniコンパイル生成プロセスを遮断するため、gradle生成を実行する際にjniの生コードを処理することなく、ndk-buildを手動で呼び出すことでsoダイナミックリンクライブラリを生成し、次のjniLibsを生成する.src Dir再配置生成ライブラリフォルダがndk-buildのデフォルトで生成されたlibsフォルダ(このデフォルトはsrc/main/jniLibsで、もちろんデフォルトでjniスクリプトを生成して実行に成功した場合は、そのままにしたい場合は手動でndk-buildを実行するときの生成経路を変更してもよい)、このときにデバッグ実行を再実行するとnativeライブラリファイルを正しく埋め込むことができます.