使用NDK for Android编译GRPC的CSharp扩展
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用NDK for Android编译GRPC的CSharp扩展相关的知识,希望对你有一定的参考价值。
我试图在Unity中使用GRPC。我被困在编译一个libgrpc_csharp_ext.so
文件,它将成功地与arm-v7a
android archetecture一起使用。我希望以下命令可以从GRPC存储库根目录开始:
arm-linux-androideabi-gcc -I. -I./include -fPIC -o libgrpc_csharp_ext.o -c src/csharp/ext/grpc_csharp_ext.c
arm-linux-androideabi-gcc -I. -I./include -shared libgrpc_csharp_ext.o -o libgrpc_csharp_ext.so
我从this question拼凑了这个。它成功编译并且Unity在/Plugins/Android
中作为arvm7
库识别该文件:
但是当GRPC尝试在实际的Android设备上使用DllImport("grpc_csharp_ext")
时,我收到一个错误:
无法加载库'/data/app/PACKAGE/lib/arm/libgrpc_csharp_ext.so',禁用本机渲染插件支持:java.lang.UnsatisfiedLinkError:dlopen失败:无法找到“/ data / app /”引用的符号“grpc_slice_from_copied_buffer”包装/ lib中/ ARM / libgrpc_csharp_ext.so” ......
其次是:
Unable to find grpc_csharp_ext
我知道这是可能的,因为this开源项目已成功交叉编译了必要的文件。当我从他们的项目下载.so文件并将其放入我的it successfully loads时,除了它是用一个非常旧版本的GRPC编译,因此我不想使用它。此外,我已经使用了类似策略的successfully created an .a file for iOS。当我用file libgrpc_csharp_ext.so
检查我的文件时,我发现它是ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, with debug_info, not stripped
。这与从开源存储库获取的文件类型相匹配。
根据上面的错误信息以及.so
是~36kb,似乎相应的符号不包含在生成的.so
中,但来自开源项目的“正确”.so
> 5mb。我想我正在编译一个不包含所有必要符号的动态库,但我不足以找到正确的选项。
感谢GRPC团队的帮助,我有一个有效的解决方案;请参阅我在这里的问题评论:https://github.com/grpc/grpc/issues/14402#issuecomment-369942250
我正在与他们合作,希望能将这些融入主人。与此同时,我将尝试使用每个平台(不仅仅是Android)的说明更新此博客文章:http://examinedself.com/cross-compile-grpc-unity/
以上是关于使用NDK for Android编译GRPC的CSharp扩展的主要内容,如果未能解决你的问题,请参考以下文章
NDk编译opencv for Android,并引用在Unity3d游戏中的一般步骤