安卓上jni添加openGL后,編譯報錯undefined reference to glUniform1i

1.undefined reference to問題,根本原因是找不到函數(shù)實現(xiàn),也就是找不到庫。
2.導(dǎo)致找不到庫的原因很多:

  • 在cmake中沒設(shè)置GLES
//CMakeLists.txt
target_link_libraries( # Specifies the target library.
                       native-lib
                       GLESv3 )
  • 由于SDK18之后才支持GLESv3,如果最小SDK小于18,就會找不到GLESv3。所以最小SDK需要設(shè)置成18及以上,如下
// build.gradle(:app)
android {
    compileSdkVersion 29
    buildToolsVersion "30.0.0"

    defaultConfig {
        applicationId "com.yao.yaoplayerandroid"
        minSdkVersion 18
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
......
  • 插上真機(jī)可以編譯過,不插真機(jī)/虛擬機(jī),編譯報錯undefined reference to
    這可能是因為沒有設(shè)置ABI---應(yīng)用程序二進(jìn)制接口。由于插真機(jī)會識別真機(jī)ABI,而不插真機(jī)就沒有ABI導(dǎo)致報錯。 設(shè)置abiFilters 決定了二進(jìn)制文件如何與系統(tǒng)進(jìn)行交互,設(shè)置ndk {abiFilters 'armeabi-v7a'} ,表示當(dāng)前安卓工程支持的平臺類型是 'armeabi-v7a'。
// build.gradle(:app)
android {
    compileSdkVersion 29
    buildToolsVersion "30.0.0"

    defaultConfig {
        //設(shè)置該安卓工程支持的平臺類型 引用時
        ndk {
            abiFilters 'armeabi-v7a'
        }
      // 設(shè)置cmake編譯時的abi  編譯時
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11"
                abiFilters 'armeabi-v7a'
            }
        }
    }
......
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容