Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在Android上使用OpenGL上下文设置SDL。获取错误消息";加载eglChooseConfig失败“;_Android_Sdl_Native Code_Egl_Android.mk - Fatal编程技术网

尝试在Android上使用OpenGL上下文设置SDL。获取错误消息";加载eglChooseConfig失败“;

尝试在Android上使用OpenGL上下文设置SDL。获取错误消息";加载eglChooseConfig失败“;,android,sdl,native-code,egl,android.mk,Android,Sdl,Native Code,Egl,Android.mk,我正在尝试在android上运行我的第一个SDL hello world项目。我使用SDL源代码包中提供的android项目模板,它使用一个名为SDL的类与android和本机c/c++代码通信。我将它们导入EclipseAndroid项目,然后稍微修改jni文件夹中的AndroidManifest.xml、Application.mk和jni/src文件夹中的android.mk 项目编译成功。但当它在模拟器上运行时(我使用GenyMotion),我在logcat中得到了错误消息 E/SDLA

我正在尝试在android上运行我的第一个SDL hello world项目。我使用SDL源代码包中提供的android项目模板,它使用一个名为SDL的类与android和本机c/c++代码通信。我将它们导入EclipseAndroid项目,然后稍微修改jni文件夹中的AndroidManifest.xml、Application.mk和jni/src文件夹中的android.mk

项目编译成功。但当它在模拟器上运行时(我使用GenyMotion),我在logcat中得到了错误消息

E/SDLActivity(1472): Failed loading eglChooseConfig: Invalid library handle
我还尝试在真实设备上调试。我得到了这个信息:

E/SDLActivity(28020): Failed loading eglChooseConfig: dlsym library handle is null
我试图在SDLActivity.java中添加“System.loadLibrary(“EGL”);”。不工作

这是我在jni/src中的Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := main

SDL_PATH := ../SDL

LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include

# Add your application source files here...
LOCAL_SRC_FILES :=  $(SDL_PATH)/src/main/android/SDL_android_main.c \
main.cpp

LOCAL_SHARED_LIBRARIES :=SDL2

LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog -lEGL

include $(BUILD_SHARED_LIBRARY)
我最终在youtube上找到了一个不错的网站。我看了这个视频,我的应用程序运行得很好。我已经在虚拟和真实设备上测试了我的应用程序

下面是youtube录像机使用的示例代码。我不是下面代码的作者。在这里放一份

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "SDL.h"
int main(int argc, char *argv[])
{
    SDL_Window* window = 0;
    SDL_GLContext gl = 0;
    if(0 != SDL_Init(SDL_INIT_VIDEO))
    {
        fprintf(stderr,"Unable to initialize SDL: %s\n",SDL_GetError());
        return 1;
    }
    SDL_LogSetAllPriority(SDL_LOG_PRIORITY_VERBOSE);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,    SDL_GL_CONTEXT_PROFILE_ES);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,2);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);
    SDL_DisplayMode mode;
    SDL_GetDisplayMode(0,0,&mode);
    int width = mode.w;
    int height = mode.h;
    SDL_Log("Width = %d, Heigh = %d. \n",width,height);
    SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL,1);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24);
    window = SDL_CreateWindow(NULL,0,0,width,height,SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN | SDL_WINDOW_RESIZABLE);
    if(window == 0)
    {
        SDL_Log("Failed to create window.");
        SDL_Quit();
        return 1;
    }
    //Create an opengl context
    gl = SDL_GL_CreateContext(window);
    /*Main Render Loop*/
    Uint8 done = 0;
    SDL_Event event;
    int count = 0;
    while(!done)
    {
        /*Check for events*/
        while(SDL_PollEvent(&event))
        {
            if(event.type == SDL_QUIT || event.type == SDL_KEYDOWN || event.type == SDL_FINGERDOWN)
            {
                done = 1;
            }
        }
        SDL_Log("%d\n",count++);
        SDL_GL_SwapWindow(window);
        SDL_Delay(10);
    }
    exit(0);
}


我有完全相同的问题,我使用Note4作为设备。
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,1);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,1);