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


114

我无法摆脱这个错误!

我已经尝试过各种方法,例如清除“派生数据”(“首选项”->“位置”->单击灰色箭头以在Finder中打开“派生数据”文件夹->右键单击,移至回收站),清理项目(CMD + Shift + K或“产品” ->清理),更新迦太基和依赖项,检查StackOverflow上的其他答案(主要是在“构建设置/阶段”中进行调整),并从github重新克隆应用程序,等等。

同一项目可在我的协作者计算机上工作。

编辑:从当前最高评价的答案,我能够进一步调试...虽然我仍然不确定如何解决。好像我在项目中有两次东西?我看了看,找不到任何东西出现两次!

这是日志的图片:



如果无法解决您的问题,您为什么接受评分最高的答案??
benomatis

Answers:


160

我今天在xcode 8版本8.3.2中面临相同的问题

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

在此处输入图片说明

那么您就可以检查是什么导致了该问题

在此处输入图片说明


感谢那!这是我在日志中得到的:imgur.com/vFkNJzZ
Jake Dobson

我终于解决了。您帮助我指引了正确的方向!Xcode在单击时没有显示日志真是太糟糕了……可以为我节省一些时间!
杰克·多布森

感谢您在日志中显示提示。我不知道我能用它
吗-KarenAnne

1
@GhasemTabatabaei在下面检查我的答案
Jake Dobson

81
为什么这是公认的答案?它实际上并不能回答问题,只能潜在地帮助您找到解决方案。
汤姆·奥克利

116

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


4
不,出于这个原因,我使用了迦太基。不过,这是一个合理的答案,可以帮助其他人解决同样的错误!
杰克·多布森

1
我将m $ AppCenter代码添加到现有项目中,并且需要Pod。不知道发生了什么,并且已经用.xcodeproj了一年多的时间了。这很简单!
丹尼斯·斯莫列克

1
我的解决方法与此有关。我最近升级了一些依赖项,该项目现在使用了CocoaPods。以前,我一直在使用项目文件。我打开了工作区文件,其中包含我的项目和Pod,并且一切正常。
Rozgonyi

40

为我工作的唯一的事情就是运行pod deintegratepod install


问题已经回答。如果您在下面看到我的评论,则说明我已经导入了已经导入到该文件中的文件。该项目处于竞争状态,试图两次引用该文件。
杰克·多布森

好吧,是的,它对我没有用,当我用谷歌搜索时,这就是问题所在,所以我认为我想尝试帮助别人...对此不熟悉,我应该删除我的答案吗?
Charles Harring

我想不是,因为它已经在那里。我敢肯定有人会发现它有用。我正在使用的应用程序未使用cocoapods。事实是,此错误非常普遍,几乎没有提供有关自身的信息。根据每个项目,可以找到这么多解决方案。
杰克·多布森

它节省了我的一天!上帝祝福你!
user2612604

19

您尝试过清洁吗?cmd + Shift + K


8
哦,是的。。很多次!
杰克·多布森

从字面上看,这就是我得到的一切……单击文本不会像其他大多数错误一样将我发送到任何其他信息或文件的位置。在控制台没事,它不永远能运行,因为这个错误的程序..
杰克多布森

FWIW,我最近在使用SDK进行构建时遇到了这个问题,@ FranciscoPerez的建议解决了这个问题。绝对建议您将它作为第一步,然后再深入调试。
riastrad

9

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

在应用程序委托文件中:

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

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

有些事情需要提及,也许将来会对任何人有所帮助。@ umairqureshi_6的回答确实帮助了我,但是没有解决。他带到了我能够找到信息的地方。我一直看到错误日志中显示AppDelegate和DarkSkyAPI文件,并且它从凭据文件中提取的信息导致了错误。我知道它必须存在于这三个文件之一中,所以我立即检查了导入,因为我记得听到.h携带了来自.m文件的所有导入。繁荣!


6

现在我已经回答了这个问题。但这是否可以帮助某人节省一些时间:我有同样的错误。我检查了所有内容,发现自己身边有一个很小的愚蠢错误。我在项目的视图控制器中导入了核心数据ManagedObject自定义文件。我不小心导入了.m文件而不是.h文件,这导致了体系结构错误中的重复符号(链接器命令失败),因为我的属性类.m文件导入了核心数据类的.h文件,从而导致了重复导入。

因此,在尝试多种解决方案之前,只需检查您是否已导入正确的文件即可!


是! 这与我的问题非常相似。我在项目中两次导入了相同的文件。相反,我将“ fileA.h”导入“ fileB.h”,但随后将“ fileA.h”和“ fileB.h”导入“ fileC.h”,或类似的方式...因此,应用崩溃因为它不知道使用哪个。绝对是提醒其他人仔细检查其文件导入的好地方!
杰克·多布森

6

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

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

现在,从xcode的左文件资源管理器中的Framework Folder中删除这些文件。

这解决了我的问题。


4

选择项目->构建阶段->使用库链接二进制文件,然后添加所有Pod库。


3

使用迦太基进行依赖时,我遇到了同样的问题。

只需转到选择项目->构建设置->搜索启用位码->如果选择是,则选择否。

那为我解决了这个问题。


2

我有同样的问题。

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

解决的办法是删除那些变量。


1
为什么您同时删除了两个而不是一个?
杰克·多布森

2

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

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


2

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

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


2

确保已Find Implicit Dependencies选中该复选框。

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


2

我正在用CocoaPods测试Sparkle框架。

可悲的是,我将pod 'Sparkle', '~> 1.21'PodFile放在错误的位置。我将其放在“测试”下面(用于单元测试)。

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


1

我只需要做import Foundation

我将Kitura用于Swift服务器端,并一直忘记了这一点!


哈。是的,您始终需要至少导入Foundation才能执行任何操作!我通常导入UIKit而不是Foundation,因为几乎总是需要使用UIKit的功能,并且UIKit为您继承了Foundation的所有内容。使用Objc进行导入可能非常棘手,但看起来您正在使用Swift?
杰克·多布森

是的,我正在使用Swift,手头的文件没有显示任何编译器问题,但是仅在运行文件时,我才遇到此问题!
蜂蜜

1
是的,直到运行时我才真正检查到它,我可能是错的。但是,在您尝试从Foundation访问某些内容,找不到导入内容,然后无法继续该过程之前,似乎没有任何问题-崩溃!
杰克·多布森

1

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

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

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

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


1
他们似乎在暗示一个文件问题...其他地方的文件没有在相互检索信息,通常在此页面上可以找到。感谢您的回复。希望它可以帮助某人!
杰克·多布森

1

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


1

就我而言,我已经更改了Target名称,Podfile因此它为我创建了相同的错误。

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

在此处输入图片说明

删除不需要的.framework


1

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

我的问题是我在错误的平台上配置了XCode-Project的Podfile。将Podfile开头的“ platform:ios”更改为“ platform:macos”对我来说是很有效的方法,它可以消除错误。


0

我有同样的问题。如果您要签出任何github项目,则不要使用git clone,而应使用git lfs clone,因为有时某些大文件不能仅通过git正确克隆。另外,请确保您的位码已禁用。


提示。.但是通常控制台会通知您某些文件太大而无法传输?
杰克·多布森

0

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


0

对于我们大多数人来说,问题似乎有所不同,并且错误消息中的信息还不错。在我的情况,部署目标设置为10.13通过export MACOSX_DEPLOYMENT_TARGET=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)

0

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

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

在此处输入图片说明


-1

在构建Ionic 1项目时遇到了相同的问题。

删除文件CDVLogger.h和CDVLogger.m后,我能够解决此问题


似乎您根本不​​需要这些文件?还必须在这些文件和其他文件中调用文件,这会混淆项目并阻止其运行。
杰克·多布森

-4

好的,当我遇到此线程时,我今天遇到了同样的问题,并开始对其进行谷歌搜索。当答案浮现在脑海时,我还没有读完问题:我声明了一个带有空构造函数的类

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的错误...
Jake Dobson

我在C ++中也遇到了此错误。您遇到的链接器错误可能是链接器找不到您的构造函数的代码。我对重命名的函数有类似的错误,但是由于Xcode 10无法自行打开链接器日志,而且我不知道您可以右键单击并“显示日志”,所以我陷入了困境分钟试图找到错误。
马特·帕金斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.