Xcode中的重复符号错误

Posted

技术标签:

【中文标题】Xcode中的重复符号错误【英文标题】:Duplicate symbol error in Xcode 【发布时间】:2012-12-31 07:49:12 【问题描述】:

在添加自己的框架后尝试构建项目时,我在 Xcode 4.5.1 中遇到“重复符号”错误。我验证了重复的框架文件,但没有。但是当我将框架添加到项目中时,它会抱怨这些错误。请建议..

duplicate symbol _NXArgc in:
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW

duplicate symbol _NXArgv in:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW

duplicate symbol ___progname in:
  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW

duplicate symbol _environ in:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW

duplicate symbol start in:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o
/Users/idcc/Test/MyFW/Products/MyTestFW.framework/MyTestFW
ld: 8 duplicate symbols for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

提前谢谢..

【问题讨论】:

我有同样的问题,但是当我在我的 iPhone 上启动它时它会运行。所以,我的模拟器中只有这个问题...... 这里一样,只是在模拟器上... 我也有这个特定的问题。寻找答案,发布赏金。 您是否在 .m 中跨多个同名文件声明了变量?我现在看到它为您提供了重复的变量名称:_NXArgc、start、_environ、_progname、_NXArgv 这些变量都来自标准库......答案很有效。 【参考方案1】:

我在使用两个第三方框架时遇到了同样的问题。我通过从构建设置中的“其他链接器标志”中删除“all_load”解决了这个问题。

【讨论】:

【参考方案2】:

这些符号在标准 C 库的启动代码 crt.o 中。通常它应该是初始化全局变量和对象的可执行文件的入口点。它还将调用您的主要功能。

但是对于一个框架,你不应该将它包含在你的二进制文件中,因为框架不应该有 main。 我相信您在框架的目标构建设置中将“与标准库链接”选项设置为“是”。这会将 crt.o 链接到您的框架中。而且当你将框架链接到项目中时,会有重复的符号。

请在您的构建设置中将“与标准库链接”选项设置为 NO。

【讨论】:

当我在构建设置中将 Link with Standard Library 设置为 no 时,我得到了 177 个编译器错误而不是 1【参考方案3】:

您的应用程序提供了一个实现,其中有 8 个重复符号。

您可能有多种方法可以做到这一点:

你有两个模块声明了同一个类。也许不再需要一个?

您正在导入文件 .m 和 .h 中的任何头文件:-(从一个地方删除。)

您正在某处导入任何 .m 文件。 :- (导入 .h 文件而不是 .m 文件)

您已在任何 .h 文件中的 @interface 外部(上方)定义和声明任何 const 变量,它可能被重复。 :- (在 .m 文件中执行。)

【讨论】:

【参考方案4】:

还要检查应用程序的.h 文件中是否正确定义了常量等全局变量。

定义全局变量的正确方法是在.h文件中使用extern变量。

注意:这不是以前的 Xcode 版本的问题。我遇到了 Xcode 6.3 的问题并解决了。

【讨论】:

【参考方案5】:

如果你只是在模拟器中运行应用程序时出现这个问题,通过删除本地文件夹来解决

~/Library/Developer/CoreSimulator

Xcode 将在第一次构建和运行后恢复它。 请确保在执行此操作之前备份所有设置(尤其是与模拟器设备相关的设置)。

在 Xcode 版本 7.2.1 (7C1002) 上测试

【讨论】:

以上是关于Xcode中的重复符号错误的主要内容,如果未能解决你的问题,请参考以下文章

Xcode代码符号错误[重复]

更新可可豆荚后xcode重复符号架构错误

Xcode 10b5 - 重复符号链接器错误,无法使用 Crashlytics 编译

Xcode中怎样查看重复文件

Xcode 中架构的重复符号

Xcode 中架构的重复符号