这个错误提示表明在链接阶段出现了“多重定义”(multiple definition)的问题。具体来说,你在多个源文件中定义了同样的变量,导致链接器无法确定使用哪个定义。
根据错误信息,这两个变量 vertexShaderSource
和 fragmentShaderSource
都是在 ShowGL.h
文件中被定义的,且在多个源文件(如 ShowGL.o
和 main.o
)中都有引用。这种情况下,你应该将这些变量的定义改为声明,并在一个源文件中进行实际定义。可以按照以下步骤解决这个问题:
解决方法
- 修改头文件(ShowGL.h):
将变量的定义更改为声明。在头文件中,去掉初始值赋值,添加 extern
关键字,如下所示:
// ShowGL.h
extern const char* vertexShaderSource;
extern const char* fragmentShaderSource;
- 在某个源文件(如 ShowGL.cpp)中进行实际定义:
在一个源文件里提供这两个变量的实际定义和初始化,例如:
// ShowGL.cpp
#include "ShowGL.h"
const char* vertexShaderSource = R"(
// Vertex shader code here...
)";
const char* fragmentShaderSource = R"(
// Fragment shader code here...
)";
确保其他源文件只包含头文件:
在任何需要使用这些变量的其他源文件(例如
main.cpp
),只需包含头文件,不要再重新定义它们。
通过这种方式,可以避免多重定义的问题,同时保证各个模块可以共享这些常量。
内容由零声教学AI助手提供,问题来源于学员提问