2010-11-19 75 views
3

编译时使用NDK建造在码头下面的C代码(我运行Ubuntu):与此Android.mk文件NDK的OpenGL未定义参考glVertexPointer

#include <jni.h> 

#include <GLES/gl.h> 
#include <GLES/glext.h> 

#include "org_opengldrawinjni_DrawinJNI.h" 


JNIEXPORT void JNICALL Java_org_opengldrawinjni_DrawinJNI_Draw 
    (JNIEnv *envptr, jobject jobj) 
{ 
GLfloat vertices[] = 
    { 1.0, 0.0, 0.0, 
    1.0, 1.0, 0.0, 
    0.0, 0.0, 0.0 
    }; 
GLubyte indices[] = { 0, 1, 2 }; 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, indices); 
} 

LOCAL_PATH := $(call my-dir) 

    include $(CLEAR_VARS) 

    LOCAL_MODULE := OpenGLJNI 
    LOCAL_SRC_FILES := org_opengldrawinjni_DrawinJNI.c 
    LOCAL_LDLIBS := -llog -lGLESv1_CM.so 

    include $(BUILD_SHARED_LIBRARY) 

我得到一个错误,未定义引用glVertexPointer。我想知道为什么,因为我相信我正确地包含了头文件并链接了Android.mk中的库

/home/thomas/Documents/LinuxProgramming/EclipseWorkspace/OpenGLDrawinginJNI/obj/local/armeabi/objs/OpenGLJNI/org_opengldrawinjni_DrawinJNI.o: In function `Java_org_opengldrawinjni_DrawinJNI_Draw': 
/home/thomas/Documents/LinuxProgramming/EclipseWorkspace/OpenGLDrawinginJNI/jni/org_opengldrawinjni_DrawinJNI.c:33: undefined reference to `glVertexPointer' 
collect2: ld returned 1 exit status 
make: *** [/home/thomas/Documents/LinuxProgramming/EclipseWorkspace/OpenGLDrawinginJNI/obj/local/armeabi/libOpenGLJNI.so] Error 1 

谢谢!

回答

7

我想不出任何错误,但是当我检查我的make文件时有一个区别。 因为我不擅长与编译器,我不知道这是否是相关的:

LOCAL_LDLIBS := -lGLESv1_CM -ldl -llog

动态链接库:

可用且可用于 使用的dlopen( )/ dlsym()/ dlclose() 功能由Android 动态链接器提供。您将需要对/system/lib/libdl.so与链接 :

LOCAL_LDLIBS:= -ldl

希望它可以帮助

+0

它没有为我工作。我都做了同样的结果和错误。 – 2014-10-08 15:36:44