对wgl -functions的未定义引用

时间:2015-10-12 08:46:30

标签: c++ opengl

我正在尝试通过Windows API创建OpenGL上下文。 其他一切都很好,但我无法弄清楚如何连接正确的库以获取对wgl ..函数的访问。

我使用MinGW进行编译。和一个make文件。 我试图链接: -lmingw32 -mwindows -lgdi32 -lopengl32 没有运气来解决问题。

我是#include windows.h和gl.h,但它们都不包含wgl函数? 我错过了什么?

下面是我的代码的WM_CREATE事件部分(这是唯一重要的事情)。

    case WM_CREATE:
    {   PIXELFORMATDESCRIPTOR pfd =
        {
            sizeof(PIXELFORMATDESCRIPTOR),
            1,
            PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,    //Flags
            PFD_TYPE_RGBA,            //The kind of framebuffer. RGBA or palette.
            32,                        //Colordepth of the framebuffer.
            0, 0, 0, 0, 0, 0,
            0,
            0,
            0,
            0, 0, 0, 0,
            24,                        //Number of bits for the depthbuffer
            8,                        //Number of bits for the stencilbuffer
            0,                        //Number of Aux buffers in the framebuffer.
            PFD_MAIN_PLANE,
            0,
            0, 0, 0
        };

        // Get current handle to device context.
        HDC hDc = GetDC(hWnd);

        // Generate pixel format.
        int wPf = ChoosePixelFormat(hDc, &pfd);

        // Set pixel format.
        SetPixelFormat(hDc, wPf, &pfd);

        // OpenGL context
        HGLRC GLc = wglCreateContext(hDc);

        // Make it current.
        wglMakeCurrent(hDc, GLc);

        break;
    }

这是我的make文件:

CXX = g++
SRC = engine.cpp os.cpp
DST = build/engine.exe
PATHS = -L c:\MinGW\lib -I c:\MinGW\include
FLAGS = -mwindows
LIBS = -lmingw32 -opengl32

$(DST): $(SRC)
    $(CXX) -o $(DST) $(FLAGS) $(PATHS) $(SRC) $(LIBS)

1 个答案:

答案 0 :(得分:1)

你的问题在于:

$(DST): $(SRC)
    $(COMPILER) $(FLAGS) $(PATHS) $(LIBS) -o $(DST) $(SRC)

通常使用旧式GNU链接器,必须在之后的文件中引入符号引用它们的文件。你最后有你的文件,这通常会混淆链接。尝试以这种方式重新排序:

$(DST): $(SRC)
    $(CXX) -o $(DST) $(FLAGS) $(PATHS) $(SRC) $(LIBS)
顺便说一句:我们从不称呼变量"编译器"在makefile中,因为可能有许多差异编译器用于单个项目。保存C ++编译器可执行文件名的变量通常称为CXX(C编译器由Makefile中的变量CC命名)。