【问题标题】:Native linking error: framework not found for architecture arm64本机链接错误:找不到架构 arm64 的框架
【发布时间】:2016-11-16 06:00:10
【问题描述】:

我正在像这样绑定一个 Xcode 项目:

然后,我在DevQPSDKCore目录中创建了一个包含代码的静态库,并引用QPSDKCore.framework,生成库libQupaiSDK.a

最后,创建了一个新的 Xamarin 绑定库

libQupaiSDK.linkwith.cs

运行项目报错:

MTOUCH:错误 MT5209:本机链接错误:找不到架构 arm64 的框架 QPSDKCore
MTOUCH:错误 MT5202:本机链接失败。请查看构建日志。

当我删除libQupaiSDK.a 时,该项目运行成功。

我无法从 xamarin 日志中得到原因,任何人都可以帮助我,谢谢。

更新

这两个库是胖库。

$ lipo -info libQupaiSDK.a  
Architectures in the fat file: libQupaiSDK.a are: i386 armv7 x86_64 arm64  
$ lipo -info QPSDKCore.a  
Architectures in the fat file: QPSDKCore.a are: armv7 i386 x86_64 arm64 

Xamarin Studio 6.1.2(内部版本 44)
Xcode 8.1(8B62)

顺便说一句,-lzXamarin.iOS 中是dylibtdb 吗?

SDK Source

【问题讨论】:

  • 如果你运行xcrun -sdk iphoneos lipo -info libQupaiSDK.a,输出是什么?
  • @SushiHangover Fat 库:fat 文件中的体系结构:libQupaiSDK.a 是:i386 armv7 x86_64 arm64

标签: xamarin xamarin.ios xamarin.ios-binding


【解决方案1】:

文件libQupaiSDKBinding.a 编译时引用QPSDKCore.framework,而不是QPSDKCore.a

您需要做的是从绑定项目中删除QPSDKCore.a 文件并正确引用QPSDKCore.framework(请参阅topic on embedding frameworks)。

基本上,将QPSDKCore.framework 复制到Qupai.iOS 项目文件夹并编辑.csproj 文件添加以下行:

  <ItemGroup>
    <NativeReference Include="QPSDKCore.framework">
      <IsCxx>False</IsCxx>
      <Kind>Framework</Kind>
    </NativeReference>
  </ItemGroup>

重新加载项目后,您将看到您的框架作为参考项目,您将能够编译和运行应用程序。

注意左侧的 .csproj 和右侧的原生引用的变化。

必须说您遇到的错误有点神秘,如果您的帖子没有包含有关 XCode 部分的详细信息,我将无法找到解决方案。

【讨论】:

  • Alex,我还有一个问题,我直接通过引用 .a 绑定了一些框架,并且之前运行良好,为什么这个 sdk 会失败?
  • 好问题。简短的回答 - 不。这个失败是因为您实际上绑定了一个已经引用框架 Y 的 .a 库 X。在最终应用程序中将所有这些一起编译时,链接器找不到框架 Y(即使您有一个以 Y 命名的库)。在您的情况下,如果您只想使用 Y 框架(没有 X 库),您可以将其绑定为框架和库。 X 和 Y 之间的依赖关系是这里的关键
  • 我将重新检查框架引用路径。感谢您的详细解释。祝你有美好的一天。 :)
  • @AlexSorokoletov 嗨,Alex,你能看到这个问题吗stackoverflow.com/questions/42962939/…。斯帕西博 :)!
【解决方案2】:

我对 MicroBlink 库有同样的问题。再次下载库后错误消失了。

看看这个Link

这个错误与没有框架(二进制)有关 在存储库中找到。

存储库包含 BlinkID SDK(本机)的 git 子模块。 BlinkID SDK 有二进制存储在 git lfs(大文件存储)上。

所以我们会推荐以下内容

  1. 安装 git lfs
    brew install git-lfs
    git lfs install

注意:如果你 没有安装 Homebrew,请按照此处的说明进行操作: http://brew.sh

  1. 克隆存储库并使用克隆的存储库而不是常规存储库 下载。克隆很重要,因为存储库包含 子模块。
    git clone git@github.com:BlinkID/blinkid-xamarin.git

  2. 获取所有子模块

    cd blinkid-xamarin
    git submodule init
    git submodule update --recursive

  3. 之后,尝试 BlinkIDiOSBinding 项目并告诉我们是否成功 工作:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2021-08-25
    • 2019-05-31
    • 2018-03-11
    相关资源
    最近更新 更多