链接器命令失败,退出代码为 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 deintegrate
和 pod 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)
我无法摆脱这个错误!
我尝试了各种方法,例如清除派生数据(首选项->位置->单击灰色箭头以在 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 deintegrate
和 pod 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 个重复符号。
解决方案是删除这些变量。
好的,我今天遇到了同样的问题,当我遇到这个线程时,我开始用谷歌搜索它。当我想到答案时,我还没有读完这个问题: 我用一个空的构造函数
声明了一个classclass 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
文件。添加该文件后我的问题得到解决。为清楚起见附上图片。必须添加突出显示的文件。
出现此问题的原因之一可能是“仅构建活动架构”。您需要设置为真。
IOS 版本(在 xcode 中)和 pod 文件中的 ios 版本应该相同(尝试使用 9.0)