首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GLSL着色器的运行时错误: ld.so检测到不一致

GLSL着色器的运行时错误: ld.so检测到不一致
EN

Stack Overflow用户
提问于 2015-06-20 11:11:20
回答 1查看 495关注 0票数 1

我正在编写一些OpenGL代码来在窗口中绘制一个小点,但是当我尝试使用我自己的着色器时,我得到了一个我不理解的错误消息。

所以,下面是我的主要函数:

代码语言:javascript
复制
int main(int argc, char** argv)
{
    // Initialize some things
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(100, 100);
    glutCreateWindow("OpenGL Test");
    glutDisplayFunc(RenderScene);
    glewInit();
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

    // Make the vertex buffer
    Vector3f vertices[1];
    vertices[0] = Vector3f(0.0f, 0.0f, 0.0f);
    glGenBuffers(1, &vertex_buffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    // Main GLUT loop
    glutMainLoop();
}

下面是我的渲染回调函数:

代码语言:javascript
复制
static void RenderScene()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glDrawArrays(GL_POINTS, 0, 1);
    glDisableVertexAttribArray(0);
    glutSwapBuffers();
}

这段代码编译并运行良好,如预期的那样,在黑色背景上显示一个小白点。

现在,我想使用我自己的着色器而不是默认的着色器。所以,在main函数中,就在glutMainLoop()之前,我包含了下面这行:

代码语言:javascript
复制
MakeShaderProgram("vertex-shader.glsl");

该函数定义为:

代码语言:javascript
复制
static void MakeShaderProgram(std::string shader_filename)
{
    GLuint program = glCreateProgram();
    GLuint shader = glCreateShader(GL_VERTEX_SHADER);
    const GLchar* ptr_filename = &shader_filename[0];
    const GLchar** ptr_filenames = &ptr_filename;
    int filename_lengths[] = {1};
    glShaderSource(shader, 1, ptr_filenames, &filename_lengths[0]);
    glCompileShader(shader);
    glAttachShader(program, shader);
    glLinkProgram(program);
    glUseProgram(program);
}

最后,与可执行文件位于同一目录的文件"vertex-shader.glsl“具有以下内容:

代码语言:javascript
复制
#version 330

layout (location = 0) in vec3 Position;

void main()
{
    gl_Position = vec4(0.5 * Position.x, 0.5 * Position.y, Position.z, 1.0);
}

现在,编译这段代码就可以了。但是,在运行它时,我收到以下错误:

代码语言:javascript
复制
Inconsistency detected by ld.so: dl-version.c: 224: _dl_check_map_versions: Assertion `needed != ((void *)0)' failed!

程序在main函数启动后立即中断。我不知道这个错误消息是什么意思,但它是由尝试使用我自己的着色器而不是默认着色器引起的。

有人能解释一下哪里出了问题吗?

如果相关,下面是我的CMakeLists.txt文件:

代码语言:javascript
复制
cmake_minimum_required(VERSION 2.8.1)

set(CMAKE_CXX_FLAGS "-std=c++11")

project(OpenGLTest)

find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
find_package(GLUT REQUIRED)

include_directories(${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_DIR} ${GLUT_INCLUDE_DIR})

file(GLOB SRCS *.cpp)

add_executable(${PROJECT_NAME} ${SRCS})

target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES} ${GLEW_LIBRARY} ${GLUT_LIBRARY})
EN

Stack Overflow用户

发布于 2015-06-20 17:47:08

这是一个Ubuntu错误。简而言之,Ubuntu搞乱了他们的OpenGL包,并引入了对pthread的依赖,即使在根本不使用pthread的程序中也是如此。简单的变通方法是将pthread添加到要链接的库列表中。

如果使用了非打包的OpenGL实现(如AMD/ATI或NVidia专有驱动程序),就会触发错误。

请参阅https://bugs.launchpad.net/ubuntu/+source/nvidia-graphics-drivers-319/+bug/1248642

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30949880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档