无法在 c# dotnetcore 中调用 JNI 导出函数

问题描述

我有一个为 Java 平台创建的共享对象文件 (.so),用 cpp 编写并从 JNI 自动生成。我也想在 c# dotnet core 中使用相同的共享对象文件的导出方法。 某些方法可以通过它们的错误名称访问并被正确调用。其余的方法要么没有附加错误名称,要么不起作用。

我使用 nm -D /lib/file name 找出符号

符号示例:

000000000000c7d9 T Java_java_1shm_1wrapper_SharedMemWrapper_addAgent
000000000000c840 T Java_java_1shm_1wrapper_SharedMemWrapper_addAgent2
000000000000d279 T Java_java_1shm_1wrapper_SharedMemWrapper_addAgentACDAttribute

正在使用示例 c# 代码的符号:

[DllImport("jshmwrap",CharSet = CharSet.Auto,EntryPoint = "_ZN20StateSvcSharedMemCtl14_initSharedMemEiPKci")]
        public static extern int initSharedMem(String svc_name);

符号不起作用:

[DllImport("jshmwrap.so",EntryPoint = "_ZN20StateSvcSharedMemCtl15getMessageQueueEPcii13enSMQSyncType")]
        public static extern long getMessageQueue(String q_name,int create);
[DllImport("jshmwrap.so",CharSet = CharSet.Auto)]
        public static extern int Java_java_1shm_1wrapper_SharedMemWrapper_initSharedMem(String svc_name);

在这里错过了什么?为什么有些混淆的名称有效而其他名称无效?另外,为什么导出的函数名称不起作用?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)