【问题标题】:Issue with Duplicate symbol in link phase of project build in XcodeXcode中项目构建的链接阶段出现重复符号的问题
【发布时间】:2011-08-15 16:52:16
【问题描述】:

我一直在为 iOS 构建游戏应用程序。该应用程序运行良好,但我今天进行了相当大的重组,使其更加“兼容”模型-视图-控制器。

我已经用 C++ 构建了主游戏引擎,但使用 Objective-C 来管理 viewControllers、视图等。

现在,当我编译项目时,我在链接阶段遇到错误。详情如下:

ld:重复符号 ApplicationEngine::OnFingerUp(Vector2) 在 /Users/Dan/Library/Developer/Xcode/DerivedData/BlackHoles-exrlidtstxzdtsbyjghgquhlsqul/Build/Intermediates/BlackHoles.build/Debug-iphonesimulator/BlackHoles.build/Objects- normal/i386/ApplicationEngine.o 和 /Users/Dan/Library/Developer/Xcode/DerivedData/BlackHoles-exrlidtstxzdtsbyjghgquhlsqul/Build/Intermediates/BlackHoles.build/Debug-iphonesimulator/BlackHoles.build/Objects-normal/i386/AppDelegate.o用于架构 i386 collect2: ld 返回 1 个退出状态 命令 /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 失败,退出代码为 1

OnFingerUp 是我的 C++ ApplicationEngine 中的一个函数,并从 viewController 中调用。

问题是否可能是由于我的#includes / #imports 中的一些混淆引起的?

我的 AppDelegate 文件需要#include 一个 MainViewController 文件来设置初始 viewController。 MainViewController 依次#includes ApplicationEngine 文件以实例化该类。 ApplicationEngine 包含 OnFingerUp 方法。然后,当我获得触摸输入时,会从 MainViewController 调用 OnFingerUp 方法。这个包含序列是否会导致重复?

我注意到,如果我暂时从应用程序中完全删除 OnFingerUp 方法,那么 ApplicationEngine 中的另一个方法也会出现同样的问题。

编译单个文件时没有任何错误或警告。我也尝试过清理所有并重新编译,但没有任何乐趣。

有人对我如何解决这个问题有任何建议吗?谢谢,丹。

【问题讨论】:

  • 发布部分 MainViewController.h 中包含您的#imports 行的问题。

标签: iphone c++ objective-c xcode compiler-construction


【解决方案1】:

我可以想到 3 个原因:1) 不小心 #include 一个 .cpp 文件,2) 在头文件中忘记 #ifndef 保护,3) 在头文件中写入方法定义时忘记内联。

【讨论】:

  • 如果我不得不猜测我会说它是 #2 - 忘记 ifndef 守卫。
  • 谢谢罗宾:在您的帮助下,我解决了!最初,项目的设置是我有一个interfaces.hpp文件,里面有很多虚拟函数来访问各种cpp引擎。我在重组时已将其剥离并直接包含 cpp 文件。将定义拆分为标头后,并包含正确的 ifndef 保护,它已正确编译。只是第一次在应用程序中使用 C++,所以仍然习惯于不#importing 一切的变幻莫测!
猜你喜欢
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 2014-09-27
  • 2019-04-16
  • 1970-01-01
相关资源
最近更新 更多