链接器命令失败,退出代码1:重复符号 - 没有.m文件

时间:2013-11-20 11:19:13

标签: ios objective-c xcode opengl-es

我在其他帖子中看到过这个问题,但在我的情况下,我使用的是sphere.h文件,其中包含球体顶点的数据,即我的游戏项目的3D模型。我将sphere.h文件导入到我的Objective-C Class中,如下所示:

 #import "SceneEnergyGlobe.h"
 #import "sphere.h"

 @interface SceneEnergyGlobe() {

 }
 @property (strong, nonatomic) GLKTextureInfo *textureInfo0;

 @end

 .....

编译项目时,收到此编译错误。我怎么解决这个问题?

这是sphere.h的内容:

 #ifndef SPHERE_HEADER
 #define SPHERE_HEADER

 unsigned int sphereNumVerts = 2280;

 float sphereVerts [] = {

   0.0743889747124915, -0.49384436095363, -0.0241703260695731,
   0.190555012144643, -0.979722062440628, -0.0619150039460291,
   0.000000, 0.95,
   0.0632787269334132, -0.49384436095363, -0.0459747512867777,
   0.162096012330563, -0.979722074526971, -0.11776900895863,
   0.050000, 0.95,
   0.125000004921036, -0.475528075643002, -0.0908176095396332,
   0.269869905435848, -0.942722669663907, -0.196071931295133,
   .....

2 个答案:

答案 0 :(得分:0)

对于包含.m的每个实现文件(sphere.h),将创建顶点数组的新副本。当这些实现文件链接在一起时,您会得到重复的符号错误。

最好的方法是在sphere.h中更改此内容:

#define sphereNumVerts 2280
extern float sphereVerts[sphereNumVerts]; 

并添加包含sphere.m定义的实施文件(sphereVerts):

#import "sphere.h"

float sphereVerts[sphereNumVerts] = {
    0.0743889747124915, -0.49384436095363, -0.0241703260695731,
    ...
};
顺便说一句,那些看起来像float的大数字;你确定你不想要double吗?

(编辑:我之前的建议是错误的;您也会在头文件中使用const获得重复的符号。我已将其更改为#define)。

答案 1 :(得分:-1)

在.h文件中创建和初始化变量是一个非常非常糟糕的主意!!!