【发布时间】:2013-09-21 06:14:01
【问题描述】:
我正在尝试在 Xcode 4.6.3 中构建一个 C++ 项目。
在我的项目中(一个非常简单的 OpenGL 游戏的开始)我有两个文件:
textures.h:
#pragma once
#include <GLUT/GLUT.h>
void load(); // load textures
GLuint dirt, water; // variables to store texture handles
textures.cpp:
#include "textures.h"
#include "util.h"
void textures::load() {
dirt = util::loadTexture("/Some/Path/Soil.png");
water = util::loadTexture("/Some/Path/Water_fresh.png");
}
这里 util.h 定义了 util::loadTexture 函数。
有两个文件包含 textures.h。第一个 (main.cpp) 调用 load() 函数作为初始化的一部分,并访问污垢变量以绑定 Soil.png 纹理。第二个 (Chunk.cpp) 包含 textures.h,但实际上还没有从其中访问任何内容。
当我尝试构建项目时,它给了我以下错误:
duplicate symbol _dirt in:
/Users/me/Library/Developer/Xcode/DerivedData/OpenGL_Testing-epporrdukapbwzawfhiwnlztzdns/Build/Intermediates/OpenGL Testing.build/Debug/OpenGL Testing.build/Objects-normal/x86_64/main.o
/Users/me/Library/Developer/Xcode/DerivedData/OpenGL_Testing-epporrdukapbwzawfhiwnlztzdns/Build/Intermediates/OpenGL Testing.build/Debug/OpenGL Testing.build/Objects-normal/x86_64/Chunk.o
duplicate symbol _water in:
/Users/me/Library/Developer/Xcode/DerivedData/OpenGL_Testing-epporrdukapbwzawfhiwnlztzdns/Build/Intermediates/OpenGL Testing.build/Debug/OpenGL Testing.build/Objects-normal/x86_64/main.o
/Users/me/Library/Developer/Xcode/DerivedData/OpenGL_Testing-epporrdukapbwzawfhiwnlztzdns/Build/Intermediates/OpenGL Testing.build/Debug/OpenGL Testing.build/Objects-normal/x86_64/Chunk.o
duplicate symbol _dirt in:
/Users/me/Library/Developer/Xcode/DerivedData/OpenGL_Testing-epporrdukapbwzawfhiwnlztzdns/Build/Intermediates/OpenGL Testing.build/Debug/OpenGL Testing.build/Objects-normal/x86_64/main.o
/Users/me/Library/Developer/Xcode/DerivedData/OpenGL_Testing-epporrdukapbwzawfhiwnlztzdns/Build/Intermediates/OpenGL Testing.build/Debug/OpenGL Testing.build/Objects-normal/x86_64/textures.o
duplicate symbol _water in:
/Users/me/Library/Developer/Xcode/DerivedData/OpenGL_Testing-epporrdukapbwzawfhiwnlztzdns/Build/Intermediates/OpenGL Testing.build/Debug/OpenGL Testing.build/Objects-normal/x86_64/main.o
/Users/me/Library/Developer/Xcode/DerivedData/OpenGL_Testing-epporrdukapbwzawfhiwnlztzdns/Build/Intermediates/OpenGL Testing.build/Debug/OpenGL Testing.build/Objects-normal/x86_64/textures.o
ld: 4 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我了解这意味着某处存在重复,或者标题包含多次。但是我所有的标题都使用#pragma once,并且我已经在工作区中搜索了“污垢”等,并且没有其他定义。我的其他标题工作正常,即使是多次包含的标题。我用不同的关键字多次搜索这个问题,并查看了其他类似的问题,但我发现的只是this SO question。
我之前在 Xcode 中遇到过其他“随机”错误 - 例如,一个项目一直在尝试使用我已删除并用静态库替换的动态库。即使我创建了一个全新的项目,错误仍然存在。从终端手动编译时它可以工作。
我错过了什么?
【问题讨论】:
标签: c++ xcode4.6 duplicate-symbol