2016-11-16 131 views
0

我绑定的Xcode项目是这样的:本地连接错误:框架找不到架构arm64

enter image description here

enter image description here

然后,我创建了一个静态库包含在DevQPSDKCore目录代码产生文库libQupaiSDK.a

最后,创建了一个新的Xamarin结合文库

enter image description here

libQupaiSDK.linkwith.cs

enter image description here

运行该项目得到错误:

MTOUCH: error MT5209: Native linking error: framework not found QPSDKCore for architecture arm64
MTOUCH: error MT5202: Native linking failed. Please review the build log.

当我成功删除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工作室6.1.2(构建44)
的Xcode 8.1(8B62)

顺便说一句,-lzdylibXamarin.iOStdb

SDK Source

+0

如果您运行'xcrun -sdk iphoneos lipo -info libQupaiSDK.a',输出是什么? – SushiHangover

+0

@SushiHangover胖库:胖文件中的体系结构:libQupaiSDK.a是:i386 armv7 x86_64 arm64 –

回答

0

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

.a file references framework

你需要做的是从结合项目中删除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更改以及右侧的本机引用。

running your app after suggested changes

必须说你有错误是一种神秘的,如果您的文章没有包括有关Xcode的部分细节,我无法找到解决方案。

+0

亚历克斯,我还有一个问题,我通过引用.a直接绑定了一些框架,并且那些工作之前很好,为什么这个sdk失败? –

+0

好问题。 简短的回答 - 没有。 这个失败的原因是你实际上绑定了一个'.a'库X,它已经引用了框架Y.在最终的应用程序中编译所有这些时,链接器无法找到框架Y(即使你有一个Y命名的库)。 在你的情况下,如果你只想使用Y框架(没有X库),你可以将它作为一个框架和一个库绑定。 X和Y之间的依赖关系在这里是关键 –

+1

我将重新检查框架引用路径。感谢您的详细解释。祝你有美好的一天。 :) –

0

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

看这个Link

此错误相关的事实是没有框架(二进制) 在仓库中找到。

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

所以,我们提出以下建议

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

注意:如果 不具备自制安装,请从这里的说明: http://brew.sh

  1. 克隆存储库,并使用克隆的回购,而不是只是经常 下载。克隆很重要,因为存储库包含 子模块。
    git clone [email protected]:BlinkID/blinkid-xamarin.git

  2. 抓取所有子模块

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

  3. 之后,尝试BlinkIDiOSBinding项目,并让我们知道,如果它 工程:)