【问题标题】:Clang error: duplicate symbol even after renaming symbolClang 错误:即使在重命名符号后也会出现重复的符号
【发布时间】:2012-12-07 05:22:06
【问题描述】:

当我构建我的项目时,我收到了来自 clang 的重复符号错误。

    duplicate symbol _server in:
    /Users/ashwinjeyakumar/Library/Developer/Xcode/DerivedData/Hikes-emzsxfmokzerjhevoirupbsrobpm/Build/Intermediates/Hikes.build/Release-iphonesimulator/Hikes.build/Objects-normal/i386/HikeViewController.o
    /Users/ashwinjeyakumar/Library/Developer/Xcode/DerivedData/Hikes-emzsxfmokzerjhevoirupbsrobpm/Build/Intermediates/Hikes.build/Release-iphonesimulator/Hikes.build/Objects-normal/i386/HikeSearchResultsViewController.o
ld: 1 duplicate symbol for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

为了调试它,我找到了我定义服务器的位置(它是一个属性)并将其删除,将其替换为 info.plist 条目。错误不会消失。我试过了:

  • 重命名 Info.Plist 中的服务器条目
  • /Users/[myusername]/Library/Developer/Xcode/DerivedData 下的“rm -rf”

我的 xcode 项目的 Shift+cmd+F 搜索未找到任何“服务器”结果,但错误仍然存​​在。

【问题讨论】:

  • 嗯我认为这个链接器错误可能是一个红鲱鱼。我在问题导航器中也有“由于缺少入口点而无法访问场景”警告。也许它根本没有进入链接器阶段,那个错误只是一个问题?
  • 不,警告消失了,这个错误仍然存​​在
  • 你在使用一些库吗?可能就在那里。
  • 刚刚想通了。感谢您尝试帮助我。

标签: ios linker clang linker-errors


【解决方案1】:

我的项目中有一个导入“Constants.h”。 Constants.h 有以下内容:

#ifndef Hikes_Constants_h
#define Hikes_Constants_h

#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
NSString *server = @"http://192.168.56.101:3000/";

#endif

问题是我的 XCode 项目中不再包含 Constants.h,因此搜索该符号从未给出结果。我终于注意到我正在导入一个不在项目中的标头。

【讨论】:

  • 顺便说一句,如果您在多个 .m 文件中包含 Constants.h,此模式通常会给您带来重复符号问题。 #ifndef 语句对每个 .m 文件仅有效一次,因此 Contants.h(尤其是您的 server 定义)将被编译两次,并且您将有重复的符号。您的 .h 应该使用 extern 构造。见stackoverflow.com/questions/538996/constants-in-objective-c。顺便说一句,FOUNDATION_EXPORT 实际上就是 extern
猜你喜欢
  • 1970-01-01
  • 2020-09-14
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多