链接器命令失败,退出代码 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 deintegrate
和 pod 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”