Linux下用C++程序创建一个虚拟机执行指定java文件的main函数

飞翔的猫 发布于 2012/11/26 09:50
阅读 891
收藏 0

@邓凡平 你好,想跟你请教个问题:

最近看了你的那本<深入理解android>,讲述zygote进程如何通过JNI_CreateJavaVM方法启动system_server并执行它的main函数的,于是我就想在自己的linux机器上跑一个小例子试一把,用c++程序创建一个JVM并执行一个简单的java文件,结果老是报链接出错,这是我用的命令:

g++ -L/usr/lib/jvm/java-6-sun/jre/lib/i386/server/libjvm.so -I/usr/lib/jvm/java-6-sun-1.6.0.26/include -I/usr/lib/jvm/java-6-sun-1.6.0.26/include/linux main.cpp 

出错提示:

main.cpp:(.text+0x82): undefined reference to `JNI_CreateJavaVM'
collect2: ld returned 1 exit status

还请教一下是不是我的链接命令写的有问题,网上搜索了一圈没有正确的答案,什么-ljvm啊都不行


加载中
0
邓凡平
邓凡平
链接有问题。查下JNI的使用吧。这方面资料很多。不一定是JNI_CreateJavaVM吧?你得查JDK关于JNI的说明。以后网上找不到答案,就去看文档。
0
邓凡平
邓凡平
而且,我也得去看。不如你自己看好了 呵呵。
0
靳材

gcc -o invoke invoke.c -I /usr/lib/jvm/java-6-sun/include/ -I /usr/lib/jvm/java-6-sun/include/linux/ -L/usr/lib/jvm/java-6-sun/jre/lib/i386/server/ -ljvm

g++ -o invoke invoke.cpp -I /usr/lib/jvm/java-6-sun/include/ -I /usr/lib/jvm/java-6-sun/include/linux/ -L/usr/lib/jvm/java-6-sun/jre/lib/i386/server/ -ljvm

0
靳材

and then add LD_LIBRARY_PATH variable in home dir .bashrc:

export LD_LIBRARY_PATH=/usr/lib/jvm/java-6-sun/jre/lib/i386/server/

source .bashrc

run it ...

返回顶部
顶部