8

添加自己的框架后尝试构建项目时,我在 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)

提前致谢..

4

5 回答 5

17

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

于 2013-10-29T09:31:15.713 回答
8

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

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

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

于 2013-01-30T01:20:39.370 回答
7

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

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

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

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

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

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

于 2014-04-05T07:14:29.247 回答
2

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

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

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

于 2015-07-21T09:37:16.997 回答
0

如果您仅在模拟器中运行应用程序时遇到此问题,则可以通过删除本地文件夹来解决

~/Library/Developer/CoreSimulator

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

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

于 2016-04-30T15:53:54.960 回答