Xamarin iOS原生链接失败的 grpc.core

问题描述 投票:2回答:1

我一直在尝试让grpc在Xamarin Forms上工作(ssl http2),在经历了一些痛苦之后,我设法使用Grpc.Core让它在Android上工作。然而,我无法在iOS上编译。通过这个问题,我试图让任何与grpc相关的东西在iOS上工作,最终找到了grpc实验性的xamarin演示,HelloworldXamarin。在这里找到了。

https:/github.comgrpcgrpctreemasterexamplescsharpHelloworldXamarin。

我下载了解决方案,但当我试图编译它时,我得到了以下错误。

enter image description here

错误信息:

Native linking failed, undefined symbol: operator delete(void*). Please verify that all the necessary frameworks have been referenced and native libraries are properly linked in.

Native linking failed. Please review the build log and the user flags provided to gcc: -LC:/g/examples/csharp/HelloworldXamarin/packages/Grpc.Core.2.23.0/build/Xamarin.iOS10/../../native/ios/universal -lgrpc_csharp_ext -force_load C:/g/examples/csharp/HelloworldXamarin/packages/Grpc.Core.2.23.0/build/Xamarin.iOS10/../../native/ios/universal/libgrpc_csharp_ext.a -LC:/g/examples/csharp/HelloworldXamarin/packages/Grpc.Core.2.23.0/build/Xamarin.iOS10/../../native/ios/universal -lgrpc -force_load C:/g/examples/csharp/HelloworldXamarin/packages/Grpc.Core.2.23.0/build/Xamarin.iOS10/../../native/ios/universal/libgrpc.a

linker command failed with exit code 1 (use -v to see invocation)

对于无法找到的警告 libgrpc_csharp_ext.a我验证了文件是存在的。

似乎是原生链接的一些问题,我很不熟悉。我使用的是几乎最新的Visual Studio(好吧,16.5.3),mac构建主机,操作系统是最新的,XCode也更新到了最新。没有对从git拉来的文件做任何修改。我这周才开始使用Xamarin iOS,所以一切都应该处于相当 "默认 "的状态。

我的setupsystem到底出了什么问题,让这个系统无法工作?我明白这仍然是一个实验性的功能,但我无法判断我是否做了什么愚蠢的事情,或者是否有一些东西发生了变化(比如XCode?或者它需要VS 2017?),使得这个不再工作? 还有人能够让这个例子编译成功吗?

我也试过新版本的grpc nuget包,那只会导致更多的错误。

最终我试图让最新的Grpc.Core在Xamarin.Forms上的iOS中工作,虽然我对iOS的工作经验很少。如果XCodeVisual StudioGrpc.Core的最新版本有问题导致这种情况,我愿意尝试解决这些问题,如果有人能给我指出正确的方向。

c# xamarin.forms xamarin.ios grpc
1个回答
2
投票

这与你的版本或你做了或没做的事情一点关系都没有。

首先说一些理论:如果有人想在Xamarin项目中使用Objective-C库或CocoaPods包,他们需要在Xamarin项目中建立一个 绑定库 来实现。把它当作原生实现和你可以使用的后来暴露的C#代码之间的某种 "桥梁"。你可以从官方文档中了解更多关于绑定的信息。此处 具体来说 此处.

总结一下信息--在创建了绑定之后,你会看到有一个 .lib.a 文件中。这正是他们所做的--将一些原生代码暴露于 libgrpc_csharp_ext.a. 不幸的是,有一些绑定是不正确的。这正是你在这里看到的--不正确绑定的后果。

看了一下这个项目,我得到了以下结论。

  1. 从2019年5月开始,有一个公开的问题,关于这个-----。https:/github.comgrpcgrpcissues19172。 遗憾的是,这个问题仍然活跃,那里没有任何动静。
  2. 我已经确认,在版本 1.21(含)以上 的构建是不行的。现在,你可以降级到版本的 1.20.1 (最后一次已知的工作)。我已经用它成功地构建了解决方案。请查看这个特定版本的变更日志和发布说明(如果有的话),这样你就知道它是否符合你的需求。

基本上,你有2个选择。

  1. 降级到上一个好的版本,以便使用它。

  2. 如果你想使用最新的版本,要么等待问题被修复,要么分叉repo并帮助修复。

如果你想看他们的构建脚本并帮助修复问题,你可以从以下地方开始 此处.

另一个有用的资源是 视频 从Xamarin官方渠道。

© www.soinside.com 2019 - 2024. All rights reserved.