JNI_CreateJavaVM

guang067 2009-01-09 04:13:04
请问,在C里面使用JNI,在创建JVM时,编译不通过,提示undefined reference to `_JNI_CreateJavaVM',
但JNI_CreateJavaVM确实是在jni.h里面定义好的啦......不知为何?环境没配好?

#include "jni.h"

int main(int argc, const char** argv) {
jint status = JNI_OK;
JavaVM* jvm = (JavaVM*) 0;
JNIEnv* env = (JNIEnv*) 0;
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_4;
vm_args.options = (JavaVMOption*) 0;
vm_args.nOptions = 0;
vm_args.ignoreUnrecognized = JNI_FALSE;
status = JNI_CreateJavaVM(&jvm, (void**) &env, &vm_args);
if (0 != status) {
printf("test: %s", DispatchStatus(status));
}
if (jvm)
(*jvm)->DestroyJavaVM(jvm);
return 0;
}
...全文
1637 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouxianglh 2010-03-20
  • 打赏
  • 举报
回复
在win XP下用DevC++ 也link 不上,但用VC++ 这个问题就解决了,但是
status = JNI_CreateJavaVM(&jvm, (void**) &env, &vm_args);

status 的值为 -1 郁闷,不知哪出问题了
taolei 2009-11-13
  • 打赏
  • 举报
回复
好像微软的lib和GNU的lib是不兼容的。windows系统,jdk下面的jvm.lib是微软的,只能在VC里用。

不过加载jvm最好不好用静态链接的方式,因为jvm.dll通常不在系统运行path里。
最好先从注册表里查询jvm.dll的路径,再用LoadLibrary+GetProcAddress方法加载。这样既可以避免找不到jvm.dll的问题,还可以在GNU环境下同样适用。
gloomyfish 2009-11-11
  • 打赏
  • 举报
回复
我用vc ++ ,从来没遇到过这样的问题
joinsky 2009-11-11
  • 打赏
  • 举报
回复
Cywin无法识别C:\JDK\include\win32文件夹下jni_md.h里头的typedef __int64 jlong;

解决的方法:

/** typedef __int64 jlong; **/把这一行注释掉,然后添加如下代码:

#ifdef __GNUC__
typedef long long jlong;
#else
typedef __int64 jlong;
#endif
引用地址:http://www.oschina.net/discuss/thread/2732
guang067 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 MT502 的回复:]
是啊,要把jvm.lib加到library paths里的,不过我只用微软的编译器编译成功过,用GCC和Borland C总是报链接错误。
不知道你用的什么编译器。
[/Quote]
gcc编译的,把cygwin里面的jni.h include进去后,再把jdk里面的jni_md.h include进去,可以编译,不过出现了/usr/include/jni.h:50: error: previous declaration of 'jint' was here
C:/Program Files/Java/jdk1.5.0_06/include/win32/jni_md.h:16: error: syntax error before "jlong"

之前把jvm.lib添加到library paths里面后,不能编译。
MT502 2009-01-09
  • 打赏
  • 举报
回复
是啊,要把jvm.lib加到library paths里的,不过我只用微软的编译器编译成功过,用GCC和Borland C总是报链接错误。
不知道你用的什么编译器。
guang067 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 MT502 的回复:]
你在link的时候加了jvm.lib没?
[/Quote]
我是使用eclipse 的C/C++开发平台,cygwin编译!
guang067 2009-01-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 MT502 的回复:]
你在link的时候加了jvm.lib没?
[/Quote]

link ? 要把jvm.lib加到library paths里面?
MT502 2009-01-09
  • 打赏
  • 举报
回复
你在link的时候加了jvm.lib没?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧