链接器命令失败,退出代码为 1(使用 -v 查看调用),Xcode 8,Swift 3

Linker Command failed with exit code 1 (use -v to see invocation), Xcode 8, Swift 3

我无法摆脱这个错误!

我尝试了各种方法,例如清除派生数据(首选项->位置->单击灰色箭头以在 Finder 中打开派生数据文件夹->右键单击,移至垃圾箱),清理项目(CMD+ Shift+K 或 Product->Clean),更新 carthage 和依赖项,检查 Whosebug 上的其他答案(主要是 Build Settings/Phases 中的调整),并从 github 重新克隆应用程序,等等

同一个项目在我的协作者计算机上工作..

编辑: 从当前评分最高的答案来看,我能够进一步调试......不过我仍然不确定如何修复。貌似我项目里有东西两次了?我找了两次都找不到任何东西!

这是日志的图片:

你试过清洁吗? cmd + shift + k

我今天在 xcode 8 版本 8.3.2

中遇到了同样的问题

右键单击问题 --> 在日志中显示

然后您就可以检查导致该问题的原因

好的...这就是解决我问题的方法...

在应用程序委托文件中:

#import "AppDelegate.h"
#import "DarkSkyAPI.h"
//#import "Credentials.h"

我已经在项目的 DarkSkyAPI.m 文件中导入了 Credentials.h。注释掉额外的导入会使错误消失!

有些事情要提一下,也许将来会对任何人有所帮助。 @umairqureshi_6的回答确实在整个过程中帮助了我,但没有解决。他把我带到了可以挖掘信息的地方。我一直在错误日志中看到 AppDelegate 和 DarkSkyAPI 文件,它从 Credentials 文件中提取的信息导致了错误。我知道它必须在这 3 个文件之一中,所以我立即检查了导入,因为我记得听说过 .h 包含其 .m 文件中的所有导入。轰!

唯一对我有用的是 运行 pod deintegratepod install

也许您安装了 pod 文件,但您仍在尝试从 .xcodeproj 文件而不是 .xcworkspace

构建

我知道问题已经得到解答了。但是,如果这可以帮助某人节省一些时间: 我有同样的错误。我检查了一切,从我这边发现了一个非常小而愚蠢的错误。我在项目的视图控制器中导入了核心数据 ManagedObject 自定义文件。 我不小心导入了 .m 文件而不是 .h 文件,这导致架构中的重复符号错误(链接器命令失败),因为我的 .m 属性文件 class 导入核心数据的 .h 文件 class,因此导致重复导入。

所以在尝试多种解决方案之前,请检查您是否导入了正确的文件。!

我只需要做 import Foundation

我在 Swift 服务器端使用 Kitura,但一直忘记这个!

这是我的问题和解决方案:

我使用源代码树(版本控制器)从源代码中删除了两个文件。应用包含我删除的两个 class 的差异后,Xcode 没有自动添加它。所以我得到了链接器错误。

我通过右键单击组名和 select "Add files to " 手动添加了文件。现在我的错误得到了解决。

如果有人遇到有关 class 文件的链接器错误,请尝试手动添加它。

上面提到了很多解决方法。没有人为我工作(但请先尝试以上)。

Select 项目 -> Select 目标 -> 链接框架和库 -> 添加所有 pod 库。 (如果它们存在于嵌入式二进制文件中则删除)

现在从 xcode 的左侧文件资源管理器中的框架文件夹中删除这些文件。

这解决了我的问题。

Select 项目-> 构建阶段->Link 带库的二进制文件并添加所有 pod 库。

我在使用 Carthage 作为依赖项时遇到了同样的问题。

只需转到 Select 项目 -> 构建设置 -> 搜索启用位码 -> 如果 select 编辑为是,select 否。

这为我解决了这个问题。

我遇到了同样的问题。

原因是我在两个文件中声明了同一个全局变量。所以它显示相同的错误说 2 个重复符号

解决方案是删除这些变量。

好的,我今天遇到了同样的问题,当我遇到这个线程时,我开始用谷歌搜索它。当我想到答案时,我还没有读完这个问题: 我用一个空的构造函数

声明了一个class
class MyClass{
    MyClass();

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

然后我想为什么不终止(不确定我在这里的选词是否正确,但谁在乎)我的 class 的构造函数带有大括号 ({})。所以我做了:

class MyClass{
    MyClass(){}

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

问题已解决,我的代码开始完美运行。

我知道,好的做法是调查问题并找到真正的原因,但这对我有用。

我在自己的设备上构建 运行 时没有遇到这个问题。只有模拟器有这个问题。我只是简单地重新启动了计算机并 运行 它。成功了。

对于任何遇到 Flurry 框架问题的人。这就是解决我的问题的原因。 对我来说,问题是我导入了以下文件但从未使用过它们。 "libFlurryTVOS_9.2.3" "libFlurryWatch_9.2.3"

所以我所要做的就是转到项目目标设置并从 "Linked framework and libraries" 部分删除这 2 个文件,问题就解决了。

在我的例子中,错误的原因是链接了两次的库。

我使用 react-native,因此它是使用 react-native link 自动链接并在 xcode 中手动链接的。

在我的例子中,我更改了 Podfile 中的 Target 名称,所以它为我创建了相同的错误。

Solution

只需点击 minus button(-) 即可 project-> Build Phase->Link Binary with libraries 删除旧的 FrameWorks 并清理并再次 运行 。这是我的工作。

删除不需要的 .framework

其他答案对我不起作用,所以我在这里分享我的解决方案,以防对其他人有所帮助:

我的问题是我为错误的平台配置了 XCode-Project 的 Podfile。将 Podfile 开头的 "platform :ios" 更改为 "platform :macos" 对我来说消除了错误。

确保选中 Find Implicit Dependencies 复选框。

(产品 -> 方案 -> 编辑方案 -> 构建 -> 查找隐式依赖项)

我正在使用 CocoaPods 测试 Sparkle 框架。

遗憾的是,我将 pod 'Sparkle', '~> 1.21' 放在 PodFile 的错误位置。我把它放在测试下面(用于单元测试)。

一旦放置在 PodFile 中的正确位置,一切都很好。

我遇到了同样的问题。如果您正在签出任何 github 项目,那么不要使用 git 克隆,而是使用 git lfs 克隆,有​​时,使用 [=12= 无法正确克隆一些大文件] 只要。另外,请确保您的位码已禁用。

对我来说,gem 锁定文件指定的 cocoapods 版本比我安装的版本旧。我不得不重新分支 运行 bundle exec pod install 而不是 pod install

对于我们大多数人来说,问题似乎有所不同,并且错误消息包含了不错的信息。在我的例子中,export MACOSX_DEPLOYMENT_TARGET=10.13 行将部署目标设置为 10.13,但我是 运行 10.14。因此,我必须在“常规”>“部署信息”中将部署目标切换为 10.14,以便与 ITLibrary 相关的符号再次可用。

cd /Users/foo/src/scrobble/macos/itunes-scrobble
    export MACOSX_DEPLOYMENT_TARGET=10.13

... SNIP ...

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_ITLibMediaItem", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibPlaylist", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibrary", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

就我而言,我正在从同一个项目中生产多个产品。对于其中一个产品,main.m 文件从同一项目下的另一个文件夹中导入了一个头文件。但是该文件未包含在“构建阶段”下的“已编译源”中。这导致了链接器错误。

仔细对比了某产品的“Build Phases”设置后,发现“Compiled Source”列表中需要包含header的.m文件。添加该文件后我的问题得到解决。为清楚起见附上图片。必须添加突出显示的文件。

出现此问题的原因之一可能是“仅构建活动架构”。您需要设置为真。

pod 构建阶段的

IOS 版本(在 xcode 中)和 pod 文件中的 ios 版本应该相同(尝试使用 9.0)