xcode中的随机重复符号(C)

xcode中的随机重复符号(C),第1张

概述我正在尝试在 Xcode 4.6.3中构建一个C项目. 在我的项目中(一个非常简单的OpenGL游戏的开头)我有两个文件: textures.h: #pragma once#include <GLUT/GLUT.h>void load(); // load texturesGLuint dirt, water; // variables to store texture handles 我正在尝试在 Xcode 4.6.3中构建一个C项目.

在我的项目中(一个非常简单的OpenGL游戏的开头)我有两个文件:

textures.h:

#pragma once#include <gluT/gluT.h>voID load(); // load texturesgluint 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()函数作为初始化的一部分,并访问dirt变量以绑定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.oduplicate 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.oduplicate 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.oduplicate 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.old: 4 duplicate symbols for architecture x86_64clang: error: linker command Failed with exit code 1 (use -v to see invocation)

我知道这意味着某处有重复,或者多次包含标题.但是我的所有标题都使用#pragma一次,我在工作区中搜索了“污垢”等等,并且没有其他定义.我的其他标题工作正常,甚至是多次包含的标题.我用不同的关键词多次搜索这个问题,并看了其他类似的问题,但我发现的只有this SO question.

我之前在Xcode中遇到过其他“随机”错误 – 例如,一个项目一直试图使用我删除的动态库并用静态库替换.即使我创建了一个全新的项目,错误仍然存​​在.它从终端手动编译时起作用.

我错过了什么?

解决方法 #pragma once不会停止多次包含头文件.

在编译单个文件时,它会停止多次包含头文件.您有(至少)三个文件,因此您要声明相同的变量3次.

不要将变量定义放在头文件中.这样做

// textures.hextern gluint dirt,water; // variable declarations// textures.cppgluint dirt,water; // variable deFinitions

您可以根据需要使用尽可能多的变量声明(前提是它们都相同),因此可以将声明放在头文件中,您必须只有一个变量定义,因此将其放在.cpp文件中.

要记住的关键是每个.cpp文件都完全独立于其他所有.cpp文件进行编译,这称为单独编译.所以你的想法#pragma曾经会阻止一个.cpp文件包含一个头文件只是因为它已被包含在另一个.cpp文件中不起作用.你不是第一个误解这个的人.

总结

以上是内存溢出为你收集整理的xcode中的随机重复符号(C)全部内容,希望文章能够帮你解决xcode中的随机重复符号(C)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1069024.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存