Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复致命错误jvmti.h没有这样的文件或目录编译终止了ubuntu的c代码?_Java_C_Ubuntu_Gcc_Jvmti - Fatal编程技术网

Java 如何修复致命错误jvmti.h没有这样的文件或目录编译终止了ubuntu的c代码?

Java 如何修复致命错误jvmti.h没有这样的文件或目录编译终止了ubuntu的c代码?,java,c,ubuntu,gcc,jvmti,Java,C,Ubuntu,Gcc,Jvmti,如何修复致命错误jvmti.h没有这样的文件或目录编译终止了ubuntu的c代码?我的c代码是: 包括“jvmti.h” JNIEXPORT jint JNICALL代理程序\u OnLoad(JavaVM*jvm,char*选项,void*保留) { /*我们返回JNI_OK以表示成功*/ printf(“\n我的名字是,\n\n”) 返回JNI_OK } JNIEXPORT void JNICALL 代理OnUnload(JavaVM*vm) { } 在终端中键入此命令:gcc-Wall-W

如何修复致命错误jvmti.h没有这样的文件或目录编译终止了ubuntu的c代码?我的c代码是:

包括“jvmti.h” JNIEXPORT jint JNICALL代理程序\u OnLoad(JavaVM*jvm,char*选项,void*保留) {

/*我们返回JNI_OK以表示成功*/ printf(“\n我的名字是,\n\n”)

返回JNI_OK

}

JNIEXPORT void JNICALL 代理OnUnload(JavaVM*vm) { }

在终端中键入此命令:gcc-Wall-W-Werror first_agent.c-o firstagent

first_agent.c:1:19:致命错误:jvmti.h:没有终止此类文件或目录编译

其中java jdk版本 JavaC1.7.0_25

其中gcc版本gcc版本4.7.3(Ubuntu/Linaro 4.7.3-2ubuntu4)


这里应该将gcc版本更新到4.8?

您需要使用
-I
选项告诉gcc在哪里可以找到它的包含文件。下面是构建JNI库的示例调用。注意,这是从Windows上的一些Maven插件自动创建的,因此有点吵:

g++ -m64 -shared -IC:\work\Produktiv\jdpapi\jdpapi-native\src\main\native 
 -IC:\work\Produktiv\jdpapi\jdpapi-native\target\native\javah 
 -IC:\opt\Java\jdk1.7.0_40\jre\..\include 
 -IC:\opt\Java\jdk1.7.0_40\jre\..\include\win32 
 -o C:\work\Produktiv\jdpapi\jdpapi-native\target\objs\DPAPI.obj 
 -c C:\work\Produktiv\jdpapi\jdpapi-native\src\main\native\DPAPI.cpp

注意,这实际上只是一行;当然,您必须调整Linux的路径:-)

这个问题现在已经很老了,但将来可能会有人碰到这个问题

正如@Gyro Gearless已经提到的,您需要指定“包含目录”

对于Ubuntu15.04上的Java8,我在

  • /usr/lib/jvm/java-1.8.0-openjdk-amd64/include
  • /usr/lib/jvm/java-1.8.0-openjdk-amd64/include/linux
在此目录中,您可以找到以下头文件:

  • classfile_constants.h
  • jawt.h
  • jdwpTransport.h
  • jni.h
  • jvmticmlr.h
  • jvmti.h
编译器需要包含的

如果您使用的是Netbeans,则可以通过项目的属性添加这些包含目录:

谢谢Gyro Gearless,但我不明白。。。iam使用的是Ubuntu13.04而不是windows…gcc在Linux和windows上的行为类似。不幸的是,我手头没有Linux设备,但您可能会在这里找到一些更好的示例: