通过NDK调用OpenGLES时,发现报错许多gl开头的方法未定义,具体如下:
奇怪的是,报错的方法还可以点击去。网上查询结果 大部分是修改让Android.mk
原因是 未配置链接OpenGLES库文件。
可是我用的是Android Studio 2.3.3 NDK开发根本看不到Android.mk,只有一个CMakeList.txt
那就在CMakeLists.txt文件中加入
set(opengl-bil GLESv2),这个是opengles2.0的,1.0和3.0没实验过
再在target_link_libraries内添加
target_link_libraries(opengl-bil)和上边的名字相对应
发现上边写错了应该是target_link_libraries(${opengl-bil})
其实还可以更简单,直接加到target_link_libraries中
target_link_libraries(GLESv2)
不需要上边的set,也不需要加大括号,直接拿库名引用
然后可以在c文件内引用了
#include <GLES2/gl2.h>
opengles 1.0是GLESv1_CM
具体代码如下:
# 指定cmake版本
cmake_minimum_required(VERSION 3.4.1)
# add_library()命令用于向CMake添加依赖源文件或库
# 指令需传入三个参数(函数库名称、库类型、依赖源文件相对路径)
add_library( # 生成函数库的名称,即libnative-lib.so或libnative-lib.a(lib和.so/.a默认缺省)
gl2jni
# 生成库类型:动态库为SHARED,静态库为STATIC
SHARED
# 依赖的c/cpp文件(相对路径)
src/main/cpp/gl_code.cpp )
# find_library()命令用于定位NDK中的库
# 需传入两个参数(path变量、ndk库名称)
find_library( # 设置path变量的名称,这里为NDK中的日志库
log-lib
#指定cmake查询库的名称
#即在ndk开发包中查询liblog.so函数库,将其路径赋值给log-lib
log )
#target_link_libraries()命令用于指定要关联到的原生库的库
target_link_libraries( # 指定目标库,与上面指定的函数库名一致
gl2jni
#链接OpenGLES 2.0
GLESv2
# 链接的库,根据log-lib变量对应liblog.so函数库
${log-lib}
)