我在Mac OS X上使用带有g++ 4.2.1的Qt 4.7和Cmake 2.8.3。
在一个文件中使用静态或全局变量时,出现奇怪的链接器错误。
这是错误:
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
computeColorUniformLocation是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有什么问题/有类似的问题吗?
最佳答案
您需要在cpp文件而不是头文件中定义静态变量。如果在头文件中定义它,则每个包含该头文件的cpp文件都将获得其自己的副本,因此链接器会抱怨符号重复。