Error: undefined reference to `glCreateShader'-Android NDK OpenGLES

通过NDK调用OpenGLES时,发现报错许多gl开头的方法未定义,具体如下:

Error: undefined reference to `glCreateShader'-Android NDK OpenGLES_第1张图片


奇怪的是,报错的方法还可以点击去。网上查询结果 大部分是修改让Android.mk

原因是 未配置链接OpenGLES库文件。


Error: undefined reference to `glCreateShader'-Android NDK OpenGLES_第2张图片


可是我用的是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

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}
                       )


你可能感兴趣的:(OpenGL,ES,ndk)