95 xcode objective-c linker-errors ios
当我尝试运行我的Xcode项目时,它失败并显示一条错误,指出我有重复的符号.我在网上查找了这些重复但没有运气的地方:
任何想法如何解决这一问题?
小智 68
对我来说,它有助于将"No Common Blocks"编译器设置切换为NO:它似乎很有意义,此处解释了设置: GCC_NO_COMMON_BLOCKS用于什么?
pic*_*ano 63
从错误中可以看出,FacebookSDK.framework已经包含了Bolts.framework类.尝试从项目中删除其他Bolts.framework.
Ada*_*m G 48
使用Xcode 8,"将项目更新为推荐设置"选项为我的项目打开了"No Common Blocks".
将其恢复为OFF可以解决所有问题.
小智 41
我在降级 pod 时弄乱了我的 pod,并且通过删除 pod 并再次安装它们,我设法解决了架构 arm64 重复符号的问题:
pod deintegrate
pod install
Run Code Online (Sandbox Code Playgroud)
如果您要转移到Xcode 7或8并打开一个非常古老的项目,我遇到了这个问题:
在 SomeConstFile.h
NSString * const kAConstant;
Run Code Online (Sandbox Code Playgroud)
在 SomeConstFile.m
NSString *const kAConstant = @"a constant";
Run Code Online (Sandbox Code Playgroud)
早期版本的编译器假定头文件中的定义是extern,所以包括SomeConstFile.h在内的所有地方都很好.
现在你需要明确声明这些consts为extern:
在 SomeConstFile.h
extern NSString * const kAConstant;
Run Code Online (Sandbox Code Playgroud)
小智 8
链接器尝试链接obj文件时会发生此错误.我可以想到这个错误的几个原因是:
复制的函数/类在项目中的两个不同的位置/文件中定义,并且只有其中一个应该编译用于构建命令的任何变体.但不知何故,这些文件都在您的项目中编译.因此,您需要检查if-else条件或将src文件添加到需要编译的文件列表中的其他依赖项,并删除特定构建命令的不需要的文件.
在项目中的两个不同位置/文件中意外定义了重复的Function/Class.删除错误的定义.
在再次构建之前清理OBJ目录,可能存在一些旧的obj文件,这些文件可能会导致此冲突.
PS我不是专家,但这是我面对它时如何解决这个问题.:)
以下补丁为我工作.. :)
Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No
Step 2: Go to TARGETS -> Build Settings -> enable testability -> No
Run Code Online (Sandbox Code Playgroud)
将其设置回NO即可解决问题!
小智 7
另一个解决方案是:
选择“ 项目” ->“ 目标” ->“ 构建阶段” ->“ 编译源” ->“搜索最后一个错误第三行中提到的文件”(在您的情况下为BFAppLinkReturnToRefererView.o)。
然后,您会在搜索结果中看到1个或2个文件。
删除其中之一,然后再次编译。现在应该重新编译,因为仅剩一个文件,没有更多的生成冲突。
如果这样不起作用,则文件中可能包含错误,您应该删除所有错误,然后重新编译。它应该再次工作。
归档时间: |
|
查看次数: |
78741 次 |
最近记录: |