【问题标题】:Invalid memory access of location 0x0 in native call by using JNI (on Mac)使用 JNI(在 Mac 上)在本机调用中对位置 0x0 的无效内存访问
【发布时间】:2010-12-14 13:23:50
【问题描述】:

我有两个 Eclipse 插件间接调用一个本地框架:插件 A 加载 libA.jnilib,插件 B 加载 libB.jnilib,然后动态地同时加载 libA.jnilib 和 libB.jnilib 加载相同的框架并调用其中的函数。

pluginA 或 pluginB 可以单独工作,但是当它们同时运行时,pluginB 将在框架调用时崩溃并出现错误 - “位置 0x0 的内存访问无效”。(在本机代码中,我可以找到函数指针resolve from the framework 不是NULL,但调用失败)我们需要两个插件一起工作,但我们无权更改pluginA的代码,因为它是遗留代码。所以我的问题是技术上是否有任何方法可以让 pluginB 成功调用框架?

【问题讨论】:

    标签: java java-native-interface shared-libraries native


    【解决方案1】:

    您可以将库文件复制到另一个名称并在 B 中使用该名称。

    【讨论】:

    • 这正是我的第一个想法。但是即使我把x.framework改成y.framework,问题依然存在。
    • 我认为这行不通。加载本机库时,会绑定到库中的符号。
    • 更重要的是,在相同的场景下,这两个插件在win上运行良好。复制dll原生lib并加载到自己的插件中,两个dll都会加载到内存中,通过jni调用原生成功
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2016-01-19
    • 2011-09-27
    • 2011-12-03
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    相关资源
    最近更新 更多