Aji*_*jpe 2 raspbian .net-core grpc
我正在尝试在运行 Raspbian os 的 raspberri Pi 中运行一个简单的 GRPC 客户端-服务器代码。
我使用的语言 -C# dotnet core (2.1)
我从这里下载了一个示例项目。
这是一个 dotnet 核心项目。我能够在 Windows 环境中运行它,我也能够在此代码中修改 .proto 文件并成功运行。
我用命令发布了解决方案
{ dotnet publish -r linux-arm }
Run Code Online (Sandbox Code Playgroud)
当尝试在 Rpi 上运行相同的程序时,我遇到了异常。附带的截图有它的详细信息。
任何帮助解决这个问题都会很有用
tl;dr问题是 libgrpc_csharp_ext 本机库,目前没有为 arm7 处理器编译和构建。我已经为 arm7 编译了它(在 pi 上)并发布了一个 nuget 包来弥合差距,直到他们一直支持它:https ://www.nuget.org/packages/libgrpc_csharp_ext.arm7/
当我完成我正在处理的其余工具和模板时,我会更新一个指向博客文章的链接。
更完整的解释:Grpc.Core nuget 包包含本地 libgrpc_csharp_ext 库,grpc 的 dotnet 实现加载在NativeExtensions.cs 中,然后与NativeMethods.Generated.cs 中的PInvoke 映射。检查该包,您将在每个 /runtimes/[win, osx, linux]/native 文件夹中看到该库的一个版本。不幸的是,没有包含该库的 linux-arm 版本。但是,在代码中,如果平台是linux,它会尝试使用此处格式化的名称加载静态库. 稍微剖析一下,你会看到,到目前为止,任何不是“64位”的“linux”平台(尽管 pi 上的 proc 是 64 位的,但你在那里使用的 linux 发行版,包括 raspbian,可能不是)会寻找 libgrpc_csharp_ext.x86.so。当你dotnet publish -r linux-arm,你会在构建输出中看到那个库,但不幸的是,它是错误的(我认为当它在运行时文件夹中找不到特定的库时,发布只是抓取“最接近的”)。
我在上面创建的 nuget 包是为 arm7 编译的——我实际上是将 grpc 存储库克隆到一个 pi 上,并剥离了足够的 /csharp 构建,以便仅创建 libgrpc_csharp_ext。包使用的“技巧”是将库放在包内的 runtimes/linux-arm/native 文件夹中,dotnet 核心在发布时识别并拉入构建输出 - 但该库仍命名为 libgrpc_csharp_ext.x86.so,因为NativeMethods.cs 格式化库名称的方式。
| 归档时间: |
|
| 查看次数: |
785 次 |
| 最近记录: |