ld:未找到框架架构 x86_64 的条纹
Posted
技术标签:
【中文标题】ld:未找到框架架构 x86_64 的条纹【英文标题】:ld: framework not found Stripe for architecture x86_64 【发布时间】:2016-04-20 07:39:47 【问题描述】:我有一个 ios 组件,它依赖于 Stripe iOS SDK,项目 A。我在 Xcode 的项目 A 中包含了 Stripe SDK,它编译得很好。
但是,我在 Xcode 中构建了另一个依赖此组件的项目,项目 B。我将项目 A 添加到项目 B 的库中。项目 A 依赖项目 B,但不直接依赖 Stripe SDK。
现在,每当我尝试编译项目 B 时,都会收到此错误:
ld: framework not found Stripe for architecture x86_64
这一行(在项目 A 内)似乎触发了错误:
#import <Stripe/Stripe.h>
Xcode 可以轻松找到Stripe.h
。我也尝试将 Stripe SDK 直接添加到项目 B 中。我已经对所有目标的 Build Phases -> Link Binary With Libraries 部分进行了两次和三次检查(列出了Stripe.framework
)。
我手动添加了 Stripe 框架,所以我也尝试使用 Cocoapods 来添加它,但这也没有用。
请帮忙!
这是项目 B(“示例”)的项目结构,下面是项目 A(“RCTFBLogin”)。
这是完整的错误:
我使用的是 Xcode 7.2 和最新版本的 Stripe SDK (6.0.0)。相同的 Stripe 框架代码在另一个项目中运行良好。
谢谢。
更新:我将“$(SRCROOT)/../..
”(因为项目 B 位于项目 A 深处的两个文件夹中)添加到项目 B 目标的构建设置 ->“搜索路径”下的“框架搜索路径”中,并且它开始成功编译。但是,我现在在运行时收到此错误:
ld: warning: Auto-Linking supplied '/Users/rettig/wip/react-native-facebook-login.2/Stripe.framework/Stripe', framework linker option at /Users/rettig/wip/react-native-facebook-login.2/Stripe.framework/Stripe is not a dylib
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_Stripe", referenced from:
objc-class-ref in libRCTFBLogin.a(RCTFBLogin.o)
ld: symbol(s) not found for architecture x86_64
【问题讨论】:
【参考方案1】:在运行我的测试目标时,我在另一个框架中看到了同样的问题。我必须在Build Phases > Link Binary With Libraries
部分下将框架添加到我的测试目标(不仅仅是我的正常目标)。
迦太基有更多关于我看到的问题的信息:https://github.com/carthage/carthage#adding-frameworks-to-unit-tests-or-a-framework
【讨论】:
【参考方案2】:您在运行测试用例时遇到过这个问题吗?
这就是我的 podfile 的样子:
def shared_pods
pod ‘GoogleMaps', '~> 1.13.0'
pod ‘SwiftyJSON', '~> 2.3.2'
pod ‘Alamofire', '~> 3.2.1'
pod ‘MGSwipeTableCell’
end
target 'projectName' do
shared_pods
end
然后我将它添加到 podfile:
target ‘ProjectTests’ do
pod ‘Nimble’, ‘~> 4.0.0’
pod ’Quick’
end
我还需要做的是:
target ‘ProjectTests’ do
shared_pods // I needed to add this line as well. Since this line included the needed 'MGSwipeTableCell' framework
pod ‘Nimble’, ‘~> 4.0.0’
pod ’Quick’
end
因此,一个可能的原因是在您的 podfile 中您没有正确添加它们,只需确保将框架添加到必要的目标中即可。
【讨论】:
男人一小时我正在寻找解决方案。我删除了所有派生数据,多次清理我的项目并尝试手动链接我的 testtarget。为我工作 - 谢谢!【参考方案3】:我必须做两件事才能让它工作:
将“$(SRCROOT)/../..”(因为项目 B 位于项目 A 深处的两个文件夹中)添加到项目 B 的构建设置 ->“搜索路径”下的“框架搜索路径”目标。
也将 Stripe SDK 添加到项目 B 的框架中。这第二步让我特别惊讶,因为项目 B 不直接依赖于 Stripe。
【讨论】:
【参考方案4】:在将一些依赖项从 pod 切换到 carthage 时注意到了这个问题。与 Honey 的回答类似,我能够解决修改 podfile 的错误。
原来我只需要添加测试目标。然后运行“pod install”,它会将您的测试目标链接到您的 pod 生成的框架。
target 'Project' do
use_frameworks!
//pods here normally
target 'ProjectTests' do
//nothing in here
end
end
【讨论】:
以上是关于ld:未找到框架架构 x86_64 的条纹的主要内容,如果未能解决你的问题,请参考以下文章
错误:未找到架构 x86_64 的符号,collect2:ld 返回 1 退出状态
C ++ XCODE ld:未找到架构x86_64 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)