首页 > 解决方案 > MinGW GLEW 未定义的引用

问题描述

当我编译我的 OpenGL 项目时,我收到警告,然后是错误:

(注意:日志对于 Stack Overflow 来说太大了,所以我只好提交给 Pastebin,但是也超过了 Free 用户的 512k 限制,所以我不得不将它拆分成多个粘贴:https ://pastebin.com/ 4P8HrVs9 https://pastebin.com/NyLn2KWZ https://pastebin.com/VR2LdPDC )

来源main.cpp

/* Test Game Main Source File
 * Copyright (C) 2020 (REDACTED)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version. */

#include <iostream>
#include <glew.c>
using namespace std;

int main() {
    return 0;
}

标签: c++mingw-w64glew

解决方案


导致这些警告的问题是您包含一个 .c 文件,特别是#include <glew.c>. 您应该始终只包含 .h 文件,除非您知道自己在做什么,即使那样也不建议这样做。

C ++中的定义声明之间存在差异。每个变量、函数和类在整个项目中只能有一个定义——在所有构建模块和所有链接库中——但可以有多个声明。定义在 .c 文件中,因此 .c 文件不应该被编译两次,甚至不应该通过将它们包含在不同的文件中来间接编译。你需要#include <GL/glew.h>改为。关于这个主题的简短文章在这里:https ://www.geeksforgeeks.org/difference-between-definition-and-declaration/ 。

奇怪的是,您甚至可以使用glew.c文件。这可能表明您没有正确设置您的库,也许您刚刚下载了 GLEW 源并且可能没有将其正确包含在您的项目中。如果即使在修复了错误的包含后,未定义的引用错误仍然存​​在,您需要提供有关如何设置项目以与 glew 链接的更多信息。


推荐阅读