体系结构i386的重复符号 - 添加自定义框架时出错

时间:2014-07-01 10:01:28

标签: ios objective-c xcode

我正在尝试将自定义框架添加到2个项目中,但发生了错误。

    duplicate symbol _OBJC_CLASS_$_ApiECV in:
    /Users/kevinmachado/Library/Developer/Xcode/DerivedData/EnvDevTestiPad-bvscnxvnzjltpxcxuoomuaqqsxpj/Build/Products/Debug-iphonesimulator/libAPI_ECV.a(ApiECV.o)
    /Users/kevinmachado/Library/Developer/Xcode/DerivedData/EnvDevTestiPad-bvscnxvnzjltpxcxuoomuaqqsxpj/Build/Products/Debug-iphonesimulator/libMKCalendar.a(ApiECV.o)
duplicate symbol _OBJC_METACLASS_$_ApiECV in:
    /Users/kevinmachado/Library/Developer/Xcode/DerivedData/EnvDevTestiPad-bvscnxvnzjltpxcxuoomuaqqsxpj/Build/Products/Debug-iphonesimulator/libAPI_ECV.a(ApiECV.o)
    /Users/kevinmachado/Library/Developer/Xcode/DerivedData/EnvDevTestiPad-bvscnxvnzjltpxcxuoomuaqqsxpj/Build/Products/Debug-iphonesimulator/libMKCalendar.a(ApiECV.o)
ld: 2 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我认为这个错误即将发生,因为我尝试将自定义框架编译两次。

我的工作区有3个项目。 API_ECViPadTest都将MKCalendar称为框架

你可以看看这里: Projet tree

iPadTest构建阶段: iPadTest build Phase

API_ECV构建阶段: API_ECV build Phase

如果我删除了API_ECV中的链接,则未发生错误,但我无法使用MKCalendar framework

有人有想法吗?我可以链接我的自定义框架而不编译它两次吗?

Thx;)

2 个答案:

答案 0 :(得分:1)

根据您发布的内容,我想:

  • 从MKCalendar链接的API_ECV
  • 从iPadTest链接的API_ECV
  • 从iPadTest链接的MKCalendar

所以这里是您的副本来自,API_ECV两次来自直接链接 MKCalendar链接。 两种可能的解决方案:

  • 请勿从iPadTest链接,依靠MKCalendar提供
  • 在MKCalendar中将其标记为“可选”(其中提到“必需”)

答案 1 :(得分:1)

您有两种选择:

  1. 对于像您这样的简单依赖项,只需从libMKCalendar.aiPadTest中删除API_ECV即可。然后它将只链接一次。 (如果编译器遇到问题,您需要指定其标题的路径。)

  2. 如果你有更复杂的依赖关系,只需将MKCalendar转换为框架,然后它就可以被不同的目标智能地重用。如果您使用Xcode 6 beta,则可以使用iOS框架。