C ++库动态链接到Java库

时间:2016-03-01 02:31:14

标签: java c++ dynamic-linking object-files

我正在为应用程序编写C ++插件。该插件是一个.o文件。将此代码/功能称为" C"。

我还写了一个Java库。将代码和功能视为" J"。

接下来我使用JNI的Invocation API来允许C调用J.现在C可以创建对象,调用方法,从Java对象传递/接收值或静态方法。从概念上讲:

 C
JNI       method call -------->   J
 C        <----------- Result R
return R

插件C通过JNI调用J.有用值R在J中计算,返回到C,最终返回给应用程序。

我使用&#34;存根电源&#34;单独测试代码J,C和JNI,并且每个部分单独工作。 R是对的。问题是当插件尝试使用对JNI的调用创建VM时:

./myPlugin.so: undefined symbol: JNI_CreateJavaVM

我认为问题在于我的C ++ .o文件想要动态链接到libjvm.so,但要么不知道怎么做,要么阻止ld.so在运行时链接。

当我使用存根主体运行JNI作为自己的代码时(也就是说,我基本上做了相同的事情,但是作为具有主函数而不是.o文件的应用程序)同样的事情发生了,但很明显ld.so无法找到libjvm.so。定义:

export LD_LIBRARY_PATH=/usr/java/jdk1.8.0_73/jre/lib/amd64/server

允许ld.so正确完成工作。但是,定义LD_LIBRARY_PATH以包含Java库并不适用于.o文件中的JNI代码。

对象文件库的动态链接规则是否不同? 我应该尝试将libjvm.so静态链接到我的.o文件中吗?怎么会这样做呢?

对我来说,我处于完全未知的领域,感觉有点迷失。任何帮助将不胜感激!

0 个答案:

没有答案