小编v_j*_*han的帖子

GLEW + cmake 链接失败“对符号 glDrawElements 的未定义引用”+“命令行中缺少 DSO”

我正在将 GLEW、SDL2 和 Assimp 与 Cmake 联系起来。构建 .o 文件时似乎工作正常,但是在链接它们时出现这些错误

:-1: error: CMakeFiles/"Projectpath".cpp.o: undefined reference to symbol 'glDrawElements'
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1:-1: error: error adding symbols: DSO missing from command line
:-1: error: collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

这是链接库的 Cmakefile 部分

find_package(OpenGL)
find_package(GLEW)
find_package(SDL2)
find_package(Assimp)
#Include(FindPkgConfig)
#PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
set(INCLUDE_DIRS ${OpenGL_INCLUDE_DIRS} ${SDL2_INCLUDE_DIRS} ${GLEW_INCLUDE_DIRS} ${Assimp_INCLUDE_DIRS})
set(LIBS ${LIBS} ${OpenGL_LIBRARIES} ${SDL2_LIBRARIES} ${GLEW_LIBRARIES} ${Assimp_LIBRARIES} )
include_directories(${INCLUDE_DIRS})

target_link_libraries(${PROJECT_NAME} ${LIBS})
Run Code Online (Sandbox Code Playgroud)

我在阅读时尝试更改链接顺序,这可能是一个问题。我还添加了 OpenGL 的东西,因为错误中的 libGL 东西,它似乎不起作用。我还阅读了有关使用检查依赖项的内容 pkg-config --print-requires --print-requires-private glew,但问题是它依赖于 20 个不同的库。我需要链接所有这些吗?

并不是我没有正确的库,我上周在这台计算机上创建了一个基本的 OpenGL 程序并且运行良好(我使用了另一种链接我的库的方法,并且还使用了 Code::Blocks 而不是 Qt-Creator) …

c++ opengl glew dynamic cmake

5
推荐指数
1
解决办法
3792
查看次数

使用默认构造函数调用的Mesh类不使用OpenGL C++

我为OpenGL 3.3创建了一个Mesh类,当我使用非默认构造函数创建类时,它在我创建对象时创建顶点时工作正常.
但是,我现在想要通过将它们放在向量中来动态创建多个对象,所以我必须添加一个默认构造函数,我使用相同的函数来设置缓冲区数据,就像使用其他构造函数一样...但是它不起作用.据我所知,这是因为它存在于向量中,但它与构造函数有关,或者事后缓冲区数据会被创建.我真的不太确定.

这是我的课程.(当我创建一个有效的网格时,我用参数调用构造函数,当它不起作用时,我构造一个没有参数的网格并调用"changeMes​​h"函数)

mesh.h

#ifndef MESH_H
#define MESH_H

#include <iostream>
#include <vector>
#include <GL/glew.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>

class mesh
{
    public:
        mesh();
        mesh(std::vector<GLfloat> vertices, std::vector<GLuint> triangles, GLuint shaderProgram);
        ~mesh();
        void changeMesh(std::vector<GLfloat> vertices, std::vector<GLuint> triangles, GLuint shaderProgram);
        void render();
        void Translate(glm::vec3 addVector);
        void Rotate(glm::vec3 rotVector, GLfloat angle);
    protected:
    private:
        GLuint vertexArrayObject, vertexBuffer, elementBuffer, shaderProgram;
        std::vector<GLfloat> vertices;
        std::vector<GLuint> indices;
        glm::mat4 transform;
        void setUpMesh();
        void bindVertices();
};

#endif // MESH_H
Run Code Online (Sandbox Code Playgroud)

mesh.cpp

    #include "../include/mesh.h"

mesh::mesh(std::vector<GLfloat> vertices, std::vector<GLuint> indices, GLuint shaderProgram) …
Run Code Online (Sandbox Code Playgroud)

c++ opengl class mesh c++11

1
推荐指数
1
解决办法
1232
查看次数

标签 统计

c++ ×2

opengl ×2

c++11 ×1

class ×1

cmake ×1

dynamic ×1

glew ×1

mesh ×1