xcode ld:架构 x86_64 的 8 个重复符号
Posted
技术标签:
【中文标题】xcode ld:架构 x86_64 的 8 个重复符号【英文标题】:xcode ld: 8 duplicate symbols for architecture x86_64 【发布时间】:2013-10-24 20:42:53 【问题描述】:我正在使用 GLUT 和 OpenGL 用 xcode 和 c++ 制作游戏。我想在我的游戏中放置一个 3D 模型,这是头文件的一般外观:
unsigned int GunNumVerts = 37812;
float GunVerts [] =
// f 1/1/1 1582/2/1 4733/3/1
0.266494348503772, 0.0252334302709736, -0.000725898139236535,
0.265592372987502, 0.0157389511523397, -0.000725898139236535,
0.264890836474847, 0.0182004476109518, -0.00775888079925833,
float GunNormals [] =
// f 1/1/1 1582/2/1 4733/3/1
0.986904930120225, -0.0937549933614904, -0.131257990706016,
0.986904930120225, -0.0937549933614904, -0.131257990706016,
0.986904930120225, -0.0937549933614904, -0.131257990706016,
float GunTexCoords [] =
// f 1/1/1 1582/2/1 4733/3/1
0.110088, 0.229552,
0.108891, 0.243519,
0.119508, 0.240861,
我收到此错误:
duplicate symbol _GunNumVerts in: /blah/blah/blah/Mouse.o
/blah/blah/blah/ViewPort.o
ld: 8 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我正在尝试在我的视口中的显示方法中显示它,如下所示:
glVertexPointer(3, GL_FLOAT, 0, GunVerts);
glNormalPointer(GL_FLOAT, 0, GunNormals);
glTexCoordPointer(2, GL_FLOAT, 0, GunTexCoords);
glDrawArrays(GL_TRIANGLES, 0, GunNumVerts);
我有 7 个其他重复的符号小短语,但只有一个实际错误。
【问题讨论】:
【参考方案1】:您在标题中定义了变量。这样每个变量都存在于每 (8) 个编译单元中。而是在标头中声明变量并在 .cpp 文件中定义它们。
例如:
// Gun.h:
extern unsigned int GunNumVerts;
extern float GunVerts[9];
// Gun.cpp:
unsigned int GunNumVerts;
float GunVerts[9] =
// f 1/1/1 1582/2/1 4733/3/1
0.266494348503772, 0.0252334302709736, -0.000725898139236535,
0.265592372987502, 0.0157389511523397, -0.000725898139236535,
0.264890836474847, 0.0182004476109518, -0.00775888079925833;
extern
告诉编译器变量的地址稍后解析(由链接器)。
此外,如果您从不打算在运行时更改这些值,则应将它们声明为 const
。
/Edit:由于您使用的是具有非常好的 C++11 支持的 clang,因此您也可以将 constexpr
用于这些值。然后它们只驻留在标题中。但是,了解链接器对于 C++ 开发人员来说很重要,因此原始建议仍然存在。
【讨论】:
非常感谢您的帮助,因为它解决了我的问题,但现在我在每个浮点数中遇到了“数组初始化程序中的多余元素”的问题。我该如何解决这个问题? 很可能你弄乱了元素的数量。float a[42] = 1, 2;
不起作用。
哦,天哪,有数千个,我在终端中使用了一个 .pl 来给我顶点的数量等。感谢您帮助我解决这个问题。
std::vector
是你的朋友以上是关于xcode ld:架构 x86_64 的 8 个重复符号的主要内容,如果未能解决你的问题,请参考以下文章
C ++ XCODE ld:未找到架构x86_64 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)
UITest 失败,错误为 'ld: entry point (_main) undefined。对于架构 x86_64'