一、錯誤描述
今天在寫一個OpenGL ES 3.0的demo的時候,編譯報錯,如下所示:
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp
:162: error: undefined reference to 'glUnmapBuffer'

完整錯誤日志,如下所示:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
Error while executing process C:\Android\sdk\cmake\3.10.2.4988404\bin\ninja.exe with arguments {-C D:\GitLab Source\OpenGLESDemo\app\.cxx\cmake\debug\armeabi-v7a opengles-lesson-lib}
ninja: Entering directory `D:\GitLab Source\OpenGLESDemo\app\.cxx\cmake\debug\armeabi-v7a'
[1/8] Building CXX object CMakeFiles/opengles-lesson-lib.dir/lesson1/Native1Lesson.cpp.o
[2/8] Building CXX object CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangle.cpp.o
[3/8] Building CXX object CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangle3.cpp.o
[4/8] Building CXX object CMakeFiles/opengles-lesson-lib.dir/graphics/GLUtils.cpp.o
[5/8] Building CXX object CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangle2.cpp.o
[6/8] Building CXX object CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangleMapBuffers.cpp.o
[7/8] Building CXX object CMakeFiles/opengles-lesson-lib.dir/graphics/Matrix.cpp.o
[8/8] Linking CXX shared library "D:\GitLab Source\OpenGLESDemo\app\build\intermediates\cmake\debug\obj\armeabi-v7a\libopengles-lesson-lib.so"
FAILED: D:/GitLab Source/OpenGLESDemo/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libopengles-lesson-lib.so
cmd.exe /C "cd . && C:\Android\SDK\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi16 --gcc-toolchain=C:/Android/SDK/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Android/SDK/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -std=c++11 -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libopengles-lesson-lib.so -o "D:\GitLab Source\OpenGLESDemo\app\build\intermediates\cmake\debug\obj\armeabi-v7a\libopengles-lesson-lib.so" CMakeFiles/opengles-lesson-lib.dir/graphics/GLUtils.cpp.o CMakeFiles/opengles-lesson-lib.dir/graphics/Matrix.cpp.o CMakeFiles/opengles-lesson-lib.dir/lesson1/Native1Lesson.cpp.o CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangle.cpp.o CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangle2.cpp.o CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangle3.cpp.o CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangleMapBuffers.cpp.o -lEGL -lGLESv2 -landroid -llog -latomic -lm && cd ."
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:125: error: undefined reference to 'glMapBufferRange'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:138: error: undefined reference to 'glUnmapBuffer'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:150: error: undefined reference to 'glMapBufferRange'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:162: error: undefined reference to 'glUnmapBuffer'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 11s
12 actionable tasks: 7 executed, 5 up-to-date
二、排查問題
我們排查上面的錯誤日志,發現有一條指令是
CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangleMapBuffers.cpp.o
-lEGL -lGLESv2 -landroid -llog -latomic -lm
咋回事,怎麼是
-lGLESv2
?
檢視下CMakeList.txt代碼,原來配置GLES版本配置成了GLESv2
target_link_libraries( # Specifies the target library.
opengles-lesson-lib
EGL
GLESv2
android
# Links the target library to the log library
# included in the NDK.
${log-lib})
我們将GLESv2改成GLESv3 即可。
target_link_libraries( # Specifies the target library.
opengles-lesson-lib
EGL
GLESv3 # OpenGL ES 3.0版本
android
# Links the target library to the log library
# included in the NDK.
${log-lib})
然後重新編譯一下。
三、新問題
上面将CMakeList.txt代碼,原來配置的GLESv2改成GLESv3,那麼
error: undefined reference to 'glUnmapBuffer'
的問題不存在了。
但是産生了新的問題,如下所示:
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp
:188: error: undefined reference to 'glDisableVertexAttribArray'
但是我們點開代碼,進入gl3.h 可以看到有這個API的。
完整錯誤日志如下所示:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
Error while executing process C:\Android\sdk\cmake\3.10.2.4988404\bin\ninja.exe with arguments {-C D:\GitLab Source\OpenGLESDemo\app\.cxx\cmake\debug\armeabi-v7a opengles-lesson-lib}
ninja: Entering directory `D:\GitLab Source\OpenGLESDemo\app\.cxx\cmake\debug\armeabi-v7a'
[1/1] Linking CXX shared library "D:\GitLab Source\OpenGLESDemo\app\build\intermediates\cmake\debug\obj\armeabi-v7a\libopengles-lesson-lib.so"
FAILED: D:/GitLab Source/OpenGLESDemo/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libopengles-lesson-lib.so
cmd.exe /C "cd . && C:\Android\SDK\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi16 --gcc-toolchain=C:/Android/SDK/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Android/SDK/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -std=c++11 -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libopengles-lesson-lib.so -o "D:\GitLab Source\OpenGLESDemo\app\build\intermediates\cmake\debug\obj\armeabi-v7a\libopengles-lesson-lib.so" CMakeFiles/opengles-lesson-lib.dir/graphics/GLUtils.cpp.o CMakeFiles/opengles-lesson-lib.dir/graphics/Matrix.cpp.o CMakeFiles/opengles-lesson-lib.dir/lesson1/Native1Lesson.cpp.o CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangle.cpp.o CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangle2.cpp.o CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangle3.cpp.o CMakeFiles/opengles-lesson-lib.dir/triangle/NativeTriangleMapBuffers.cpp.o -lEGL -lGLESv3 -landroid -llog -latomic -lm && cd ."
C:/Android/SDK/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: error: cannot find -lGLESv3
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:78: error: undefined reference to 'glCreateProgram'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:84: error: undefined reference to 'glAttachShader'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:87: error: undefined reference to 'glAttachShader'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:90: error: undefined reference to 'glLinkProgram'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:94: error: undefined reference to 'glGetProgramiv'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:99: error: undefined reference to 'glGetProgramiv'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:103: error: undefined reference to 'glGetProgramInfoLog'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:109: error: undefined reference to 'glDeleteProgram'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:113: error: undefined reference to 'glDeleteShader'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:114: error: undefined reference to 'glDeleteShader'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:31: error: undefined reference to 'glCreateShader'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:37: error: undefined reference to 'glShaderSource'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:40: error: undefined reference to 'glCompileShader'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:43: error: undefined reference to 'glGetShaderiv'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:48: error: undefined reference to 'glGetShaderiv'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:53: error: undefined reference to 'glGetShaderInfoLog'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/graphics/GLUtils.cpp:59: error: undefined reference to 'glDeleteShader'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:5: error: undefined reference to 'glGetString'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:131: error: undefined reference to 'glViewport'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:147: error: undefined reference to 'glClearColor'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:148: error: undefined reference to 'glClear'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:151: error: undefined reference to 'glUseProgram'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:154: error: undefined reference to 'glGetUniformLocation'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:155: error: undefined reference to 'glGetAttribLocation'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:156: error: undefined reference to 'glGetAttribLocation'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:10: error: undefined reference to 'glGetError'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:10: error: undefined reference to 'glGetError'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:183: error: undefined reference to 'glVertexAttribPointer'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:191: error: undefined reference to 'glEnableVertexAttribArray'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:193: error: undefined reference to 'glVertexAttribPointer'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:201: error: undefined reference to 'glEnableVertexAttribArray'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:209: error: undefined reference to 'glUniformMatrix4fv'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/lesson1/Native1Lesson.cpp:211: error: undefined reference to 'glDrawArrays'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle.cpp:76: error: undefined reference to 'glClearColor'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle.cpp:8: error: undefined reference to 'glGetString'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle.cpp:84: error: undefined reference to 'glViewport'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle.cpp:93: error: undefined reference to 'glClear'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle.cpp:98: error: undefined reference to 'glUseProgram'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle.cpp:122: error: undefined reference to 'glVertexAttribPointer'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle.cpp:126: error: undefined reference to 'glEnableVertexAttribArray'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle.cpp:138: error: undefined reference to 'glDrawArrays'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle2.cpp:8: error: undefined reference to 'glGetString'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle2.cpp:86: error: undefined reference to 'glClearColor'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle2.cpp:94: error: undefined reference to 'glViewport'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle2.cpp:103: error: undefined reference to 'glClear'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle2.cpp:108: error: undefined reference to 'glUseProgram'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle2.cpp:133: error: undefined reference to 'glVertexAttribPointer'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle2.cpp:137: error: undefined reference to 'glEnableVertexAttribArray'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle2.cpp:146: error: undefined reference to 'glVertexAttrib4fv'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle2.cpp:160: error: undefined reference to 'glDrawArrays'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle2.cpp:163: error: undefined reference to 'glDisableVertexAttribArray'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:8: error: undefined reference to 'glGetString'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:88: error: undefined reference to 'glClearColor'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:96: error: undefined reference to 'glViewport'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:105: error: undefined reference to 'glClear'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:110: error: undefined reference to 'glUseProgram'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:115: error: undefined reference to 'glGenBuffers'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:117: error: undefined reference to 'glBindBuffer'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:118: error: undefined reference to 'glBufferData'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:120: error: undefined reference to 'glBindBuffer'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:121: error: undefined reference to 'glBufferData'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:123: error: undefined reference to 'glBindBuffer'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:124: error: undefined reference to 'glBufferData'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:127: error: undefined reference to 'glBindBuffer'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:137: error: undefined reference to 'glDrawElements'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:139: error: undefined reference to 'glDisableVertexAttribArray'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangle3.cpp:140: error: undefined reference to 'glDisableVertexAttribArray'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:120: error: undefined reference to 'glGenBuffers'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:123: error: undefined reference to 'glBufferData'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:125: error: undefined reference to 'glMapBufferRange'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:138: error: undefined reference to 'glUnmapBuffer'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:150: error: undefined reference to 'glMapBufferRange'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:162: error: undefined reference to 'glUnmapBuffer'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:186: error: undefined reference to 'glDrawElements'
D:/GitLab Source/OpenGLESDemo/app/src/main/cpp/triangle/NativeTriangleMapBuffers.cpp:188: error: undefined reference to 'glDisableVertexAttribArray'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 7s
15 actionable tasks: 3 executed, 12 up-to-date
四、分析新問題
檢視上面的完整錯誤日志,使用的是GLESv3版本,但是感覺gl3.h裡面的API都找不到。
4.1 分析AndroidManifest.xml中聲明了OpenGL ES版本
AndroidManifest.xml中聲明了OpenGL ES版本,如下所示,應該是沒問題的
<uses-feature android:glEsVersion="0x00030002"
android:required="true" />
4.2 檢視CMakeList.txt中的OpenGL ES的庫
前面的那個問題,我們修複了OpenGL ES的庫版本為GLESv3,并且錯誤日志也顯示使用了這個版本,是以應該也不是這裡的問題
4.3 檢視 build.gradle 裡面的 minSdkVersion
檢視官網 https://developer.android.com/guide/topics/graphics/opengl,有如下所示的介紹:
Android 可通過開放圖形庫 (OpenGL®)(特别是 OpenGL ES API)來支援高性能 2D 和 3D 圖形。OpenGL 是一種跨平台的圖形 API,用于為 3D 圖形處理硬體指定标準的軟體接口。OpenGL ES 是 OpenGL 規範的一種形式,适用于嵌入式裝置。Android 支援多版 OpenGL ES API:
- OpenGL ES 1.0 和 1.1 - 此 API 規範受 Android 1.0 及更高版本的支援。
- OpenGL ES 2.0 - 此 API 規範受 Android 2.2(API 級别 8)及更高版本的支援。
- OpenGL ES 3.0 - 此 API 規範受 Android 4.3(API 級别 18)及更高版本的支援。
- OpenGL ES 3.1 - 此 API 規範受 Android 5.0(API 級别 21)及更高版本的支援。
注意:要使裝置支援 OpenGL ES 3.0 API,則需要使用由裝置制造商提供的此圖形管道的一個實作。搭載 Android 4.3 或更低版本的裝置可能不支援 OpenGL ES 3.0 API。如需了解如何檢查運作時支援的 OpenGL ES 版本,請參閱檢查 OpenGL ES 版本。
檢視項目的build.gradle檔案,發現minSdkVersion 被設定為 16,不支援OpenGL ES 3.0
我們将minSdkVersion 設定為 18,然後重新編譯。
好吧,重新編譯正常。 運作效果如下,一個彩色的三角形。
五、總結
要是有OpenGL ES 3.0版本,得做如下幾件事情。
- 在AndroidManifest.xml中聲明 OpenGL ES 3.0版本。
<uses-feature android:glEsVersion="0x00030002"
android:required="true" />
- build.gradle中minSdkVersion得聲明為18以上。
- CMakeLists.txt裡面的target_link_libraries,得添加GLESv3庫,不要寫成GLESv2庫了。