c++ - 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 文件,特别是#include <glew.c>
. 您应该始终只包含 .h 文件,除非您知道自己在做什么,即使那样也不建议这样做。
C ++中的定义和声明之间存在差异。每个变量、函数和类在整个项目中只能有一个定义——在所有构建模块和所有链接库中——但可以有多个声明。定义在 .c 文件中,因此 .c 文件不应该被编译两次,甚至不应该通过将它们包含在不同的文件中来间接编译。你需要#include <GL/glew.h>
改为。关于这个主题的简短文章在这里:https ://www.geeksforgeeks.org/difference-between-definition-and-declaration/ 。
奇怪的是,您甚至可以使用glew.c文件。这可能表明您没有正确设置您的库,也许您刚刚下载了 GLEW 源并且可能没有将其正确包含在您的项目中。如果即使在修复了错误的包含后,未定义的引用错误仍然存在,您需要提供有关如何设置项目以与 glew 链接的更多信息。
推荐阅读
- c# - 修改实体后 DbContext.SaveChanges() 不更新数据库
- regex - Scala - 如何在带有正则表达式的 s3:/ 前缀之后提取路径?
- r - 手动将填充颜色绑定到值
- mongodb - Mongodb 带索引的排序性能
- c# - 如何使用 C# 在 Github 中自动创建问题
- json - 接收 JSON 对象,是否需要“包装”方括号?
- php - Codeingiter 以更快的方式获取计数
- python - 是否有 Ansible 的客户端/代理软件?
- apache-spark - 如何在不分叉/修改 Spark 本身的情况下创建自定义 Spark-Native 函数
- c# - 代码中的字符串与文件中的字符串有什么区别