【发布时间】:2011-12-23 04:20:14
【问题描述】:
我在 Mac OS X 上使用 Qt 4.7 和 Cmake 2.8.3 以及 g++ 4.2.1。
在我的一个文件中使用静态或全局变量时,我遇到了一个奇怪的链接器错误。 这是错误:
ld: duplicate symbol ColorTrail::calculateColorUniformLocation in CMakeFiles/GLBall.dir/src/DesktopMain.cpp.o and CMakeFiles/GLBall.dir/src/ColorTrail.cpp.o
collect2: ld returned 1 exit status
calculateColorUniformLocation 是 ColorTrail 类的静态成员...但它甚至根本没有在 DesktopMain.cpp 中使用!
这是我尝试过的: 重命名变量并不能解决问题。 将变量移出类并使其成为普通的全局变量也不能解决它
文件 ColorTrail.h:
#ifndef COLORTRAIL
#define COLORTRAIL 9
#include "GlobalConstants.h"
#include <vector>
using namespace std;
class ColorTrail
{
private:
//note that this is NOT a Q_OBJECT
static GLint calculateColorUniformLocation;
//omitted for brevity
};
GLint ColorTrail::calculateColorUniformLocation;
#endif
DesktopMain.cpp 使用 ColorTrail 类,但不是静态的,从不引用变量。
有人知道 Qt 出了什么问题/遇到过类似的问题吗?
【问题讨论】:
-
就像 Naveen 说的,移动 GLint ColorTrail::calculateColorUniformLocation;到 .cpp 文件
标签: c++ qt cmake linker-errors static-members