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

3
我一直在尝试让grpc(ssl http2)在Xamarin Forms上工作,在使用Grpc.Core后,我设法使其在Android上运行。但是我无法编译iOS。为解决这个问题,我试图让与grpc相关的任何东西在iOS上运行,并最终找到了grpc实验性的xamarin演示,HelloworldXamarin,可以在此处找到:https://github.com/grpc/grpc/tree/master/examples/csharp/HelloworldXamarin。我下载了解决方案,但在尝试编译时出现以下错误:enter image description here。链接错误,未定义符号:operator delete(void *)。请验证是否已引用所有必要的框架并正确链接本机库。关于找不到libgrpc_csharp_ext.a的警告,我验证了该文件是否存在。出现了某些与我不熟悉的本机链接问题。我正在使用几乎最新的Visual Studio(16.5.3),一个具有最新OS和更新到最新版本的XCode的mac构建主机。没有对从git拉取的文件进行任何更改。我刚刚开始使用Xamarin iOS,所以一切都应该处于相当“默认”的状态。我的设置/系统有什么问题会导致它无法工作?我知道这还是一个实验性的特性,但我无法确定是否做了愚蠢的事情,或者是否发生了某些更改(例如XCode?或者它需要VS 2017?)使其不再工作?是否有其他人能够将此示例编译?我还尝试了更新的grpc nuget包的版本,但那只导致更多错误。

最终我想在Xamarin.Forms上让最新的Grpc.Core在iOS上运行,尽管我很少在iOS上开发。如果最新版本的XCode/Visual Studio/Grpc.Core有问题导致这种情况,我愿意尝试解决它们,如果有人能指点我正确的方向。


1
有趣,我会看一下。 - L.Trabacchin
1个回答

2
这与您的版本或您所做或未做的任何事情都没有关系。
首先讲一些理论: 如果有人想在他们的Xamarin项目中使用Objective-C库或CocoaPods包,他们需要为此创建一个“绑定库”。将其视为本地实现和稍后公开的可以使用的C#代码之间的某种“桥梁”。您可以从官方文档(这里)和更具体地(这里)了解有关绑定的更多信息。
总结一下 - 在创建绑定后,您会看到一个.lib.a文件。这正是他们所做的-将一些本机代码公开到libgrpc_csharp_ext.a中。不幸的是,有一些绑定是不正确的。这正是您在此处看到的-不正确绑定的后果。
通过对该项目的研究,我得出了以下结论:
  1. 自2019年5月以来就有一个关于此问题的未解决问题-(这里)。不幸的是,该问题仍然存在,没有任何进展。
  2. 我确认在版本1.21(含)之后构建无法正常工作。目前,您可以降级到版本1.20.1(最后已知可用版本)。我已成功使用它构建了解决方案。请查看此特定版本的更改日志和发行说明(如果有),以便您知道它是否符合您的需求。
基本上,您有两个选择:
  1. 降级到最后一个好版本以便使用它;

  2. 如果您想要使用最新版本,请等待问题得到解决,或者分叉存储库并帮助修复。

如果您想查看他们的构建脚本并帮助解决问题,您可以从(这里)开始。
另一个有用的资源是官方Xamarin频道的视频

非常感谢,我一直在想可能得不到这个问题的答案。我对绑定库有一些了解(基本上是一个包装器),但除此之外,我不确定从哪里开始,所以我非常感谢你的帮助。我会查看你提供的链接,看看能否找到解决方法。我很想自己解决这个问题,但我不知道是否具备足够的知识或技能,所以我可能会选择降级。我尝试了几个版本,但没有成功构建,但我不记得是否尝试过那个特定版本。我要进行一些测试! - cost
小更新,我之前找到了2019年5月的Github问题,但我没有看到其他任何后续跟进,所以我不确定(想在这里问问再尝试发布)。我获取了最新版本的Xamarin演示,并将其降级为1.20.1。我仍然遇到一些错误,但它们似乎是类/命名空间差异的问题。我正在努力修复它。我很好奇,您能否自己编译此代码,还是只是通过查看问题/文档来了解的? - cost
它确实构建成功了,是我的错误!我只降级了grpc.core而没有降级grpc.core.api。现在要看看我是否想尝试这个旧版本,或者我能否让最新的修复版本与xamarin一起工作。我更喜欢使用最新版本,其他人也会受益。 - cost
能够使用Grpc.Core、Grpc.Core.Api和Grpc.Tools 1.20.1在我的测试项目中使其工作。不确定是否能够做到修复最新版所需的操作,但我会尝试。令人发笑的是,1.20.1恰好是一年前的今天。 - cost
很奇怪,我想知道为什么演示项目使用1.23版本,如果它无法构建超过1.20.1?我认为这就是让我困惑的原因,我以为演示项目一定很好。再次感谢。 - cost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接