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中的重复符号错误的主要内容,如果未能解决你的问题,请参考以下文章