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

Posted

技术标签:

【中文标题】链接器命令失败,退出代码 1(使用 -v 查看调用)、Xcode 8、Swift 3【英文标题】:Linker Command failed with exit code 1 (use -v to see invocation), Xcode 8, Swift 3 【发布时间】:2017-10-03 08:54:31 【问题描述】:

我无法摆脱这个错误!

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

同一个项目在我的合作者计算机上运行..

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

这是日志的图片:

【问题讨论】:

***.com/questions/44601404/… 如果没有解决您的问题,您为什么要接受评分最高的答案...? @umairqureshi_6 的回答不适合这个问题。我不明白它如何成为这个问题的公认答案。它没有给出任何提示。 【参考方案1】:

我今天在 xcode 8 版本 8.3.2 中遇到了同样的问题

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

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

【讨论】:

谢谢!这是我在日志中得到的:imgur.com/vFkNJzZ 我终于解决了这个问题。你帮助我朝着正确的方向前进!点击时 Xcode 没有显示日志真的很糟糕......可以节省我一些时间! @JakeDobson 你能告诉我你是怎么解决这个问题的吗? @GhasemTabatabaei 在下面查看我的答案 为什么这是公认的答案?它实际上并没有回答问题,只是可能有助于找到解决方案。【参考方案2】:

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

【讨论】:

不,我使用 Carthage 就是因为这个原因。不过,这是一个合理的答案,可以帮助其他有同样错误的人! 我将 m$ AppCenter 代码添加到现有项目中,它需要 Pod。不知道发生了什么,并且已经使用 .xcodeproj 做了一年多。就是这么简单! 我的修复与此有关。我最近升级了一些依赖项,该项目现在使用 CocoaPods。以前我总是在项目文件中工作。我打开了工作区文件,其中包含我的项目和 Pod,一切正常。【参考方案3】:

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

【讨论】:

问题已得到解答。如果您在下面看到我的评论,我已经导入了一个已经导入该文件的文件。该项目处于竞争状态,试图两次引用该文件。 好的,是的,它对我没有用,当我用谷歌搜索时,这就是出现的问题,所以我想我试着帮助别人......我是新手,我应该删除我的答案吗? 我猜不是,因为它已经在那里了。我相信有人可能会觉得它很有用。我使用的应用程序没有使用 cocoapods。问题是,这个错误很常见,而且很少提供关于它自己的信息。可以找到很多解决方案,具体取决于每个项目。 它节省了我的时间!上帝保佑你!【参考方案4】:

你试过干净吗? cmd + shift + k

【讨论】:

哦是的..很多次! 这就是我得到的所有内容...单击文本不会向我发送任何额外信息或文件位置,就像大多数错误一样。控制台中没有任何内容,由于此错误,它永远无法运行应用程序.. FWIW,我最近在使用 SDK 构建时遇到了这个问题,@FranciscoPerez 的建议成功了。在深入调试之前,绝对推荐它作为第一步。【参考方案5】:

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

在应用委托文件中:

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

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

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

是的!这与我的问题非常相似。我在我的项目中导入了两次相同的文件。相反,我将“fileA.h”导入“fileB.h”,然后将“fileA.h”和“fileB.h”导入“fileC.h”,或者类似的东西......所以应用程序崩溃了因为它不知道使用哪个。绝对是提醒其他人仔细检查文件导入的好地方!【参考方案7】:

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

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

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

这解决了我的问题。

【讨论】:

【参考方案8】:

选择项目->构建阶段->将二进制文件与库链接并添加所有pod库。

【讨论】:

【参考方案9】:

我在使用 Carthage 进行依赖时遇到了同样的问题。

只要去Select Project -> Build Settings -> 搜索Enable Bitcode -> 如果选择Yes,就选择No。

这为我解决了这个问题。

【讨论】:

【参考方案10】:

在我的情况下,错误的原因是链接了两次的库。

我使用react-native,所以它使用react-native link 自动链接并在xcode 中手动链接。

【讨论】:

您能详细说明一下修复方法吗? @HagaiHarari 我不记得很多细节了。我会尝试在 xcode 中手动取消链接并检查。【参考方案11】:

我有同样的问题。

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

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

【讨论】:

为什么你同时删除了两个而不是一个?【参考方案12】:

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

所以我所要做的就是转到项目目标设置并从“链接的框架和库”部分中删除这两个文件,问题就解决了。

【讨论】:

【参考方案13】:

确保选中Find Implicit Dependencies 复选框。

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

【讨论】:

【参考方案14】:

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

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

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

【讨论】:

【参考方案15】:

我只需要import Foundation

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

【讨论】:

哈。是的,在你做任何事情之前,你总是需要至少导入 Foundation!我通常导入 UIKit 而不是 Foundation,因为几乎总是我需要使用 UIKit 的功能,而 UIKit 已经为你继承了 Foundation 的所有东西。使用 Objc 导入可能非常棘手,但看起来您使用的是 Swift? 是的,我使用的是 Swift,手头的文件没有显示任何编译器问题,但仅在运行文件期间,我遇到了这个问题! 是的,我认为它直到运行时才真正检查,我可能是错的。但是,它似乎不会有问题,直到您尝试从 Foundation 访问某些内容,找不到导入,然后无法继续该过程 - 崩溃!【参考方案16】:

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

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

我手动添加了文件,右键单击组名并选择“将文件添加到”。现在我的错误得到了解决。

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

【讨论】:

这绝对是他们试图暗示的文件问题......其他地方的文件没有相互检索信息似乎在此页面上很常见。感谢您的回复。希望它对未来的人有所帮助!【参考方案17】:

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

【讨论】:

【参考方案18】:

在我的情况下,我更改了 Podfile 中的 Target 名称,因此它为我创建了相同的错误。

解决方案

只需转到project-> Build Phase->Link Binary with libraries 通过单击minus button(-) 删除旧的FrameWorks,然后再次清理并运行。这是我的工作。

删除不需要的.framework

【讨论】:

【参考方案19】:

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

我的问题是我为错误的平台配置了 XCode-Project 的 Podfile。将我的 Podfile 开头的“platform :ios”更改为“platform :macos”对我来说可以摆脱错误。

【讨论】:

【参考方案20】:

我遇到了同样的问题。如果您正在检查任何 github 项目,那么不要使用 git clone,而是使用 git lfs clone,因为有时,仅使用 git 无法正确克隆一些大文件。另外,请确保您的位码已禁用。

【讨论】:

好注意..但通常控制台会告诉您某些文件太大而无法传输?【参考方案21】:

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

【讨论】:

【参考方案22】:

对于我们大多数人来说,问题似乎有所不同,并且错误消息包含了不错的信息。在我的例子中,部署目标由export MACOSX_DEPLOYMENT_TARGET=10.13 行设置为10.13,但我正在运行10.14。因此,我必须在 General > Deployment Info 中将我的 Deployment Target 切换为 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)

【讨论】:

【参考方案23】:

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

在仔细比较了可以成功构建的产品的“构建阶段”设置后,我意识到标题的.m文件需要包含在“编译源”列表中。添加该文件后,我的问题得到解决。为了清楚起见,附上一张图片。必须添加突出显示的文件。

【讨论】:

【参考方案24】:

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

【讨论】:

【参考方案25】:

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

【讨论】:

【参考方案26】:

好的,我今天遇到了同样的问题,并开始在谷歌上搜索它,当我遇到这个帖子时。当答案突然出现时,我还没有读完这个问题: 我声明了一个带有空构造函数的类

class MyClass
    MyClass();

    void func_one()
    // code
    

    void func_two()
    // code
    

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

然后我想为什么不使用花括号 () 终止我的类的构造函数(不确定我在这里的单词选择是否正确,但谁在乎)。所以我做了:

class MyClass
    MyClass()

    void func_one()
    // code
    

    void func_two()
    // code
    

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

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

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

【讨论】:

我不认为这对这个线程有帮助......似乎错误是试图解决文件问题,比如在单独的文件中导入相同的东西。我觉得很奇怪你会收到这个错误,因为这是一个 Objective-C 特定的错误...... 我在 C++ 中也遇到了这个错误。在您的情况下,链接器错误可能是链接器找不到您的构造函数的代码。我重命名的函数也有类似的错误,但因为 Xcode 10 不会自行打开链接器日志,而且我不知道您可以右键单击并“显示日志”,所以我被难住了一些分钟试图找到错误。

以上是关于链接器命令失败,退出代码 1(使用 -v 查看调用)、Xcode 8、Swift 3的主要内容,如果未能解决你的问题,请参考以下文章

链接器命令失败,退出代码(没有这样的模块)

Xcode:Pod 安装后构建失败(错误:链接器命令失败,退出代码 1)

cocoapods - 链接器命令失败,退出代码为 1

Cocoapods 安装,然后“链接器命令失败,退出代码 1”

使用 pod install 后出现 Swift 错误(clang:错误:链接器命令失败,退出代码为 1)

Xcode 6:链接器命令失败,退出代码为 1