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 的条纹的主要内容,如果未能解决你的问题,请参考以下文章

ld:未找到架构 x86_64(领域)的符号

C++ 库编程错误:ld:未找到架构 x86_64 的符号

错误:未找到架构 x86_64 的符号,collect2:ld 返回 1 退出状态

C ++ XCODE ld:未找到架构x86_64 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)

ld:入口点(_main)未定义。对于架构 x86_64:Xcode 9

架构 x86_64 的 Xcode 未定义符号: