5

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

包括“jvmti.h”

JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) {

/* 我们返回 JNI_OK 表示成功 */ printf("\nmy name is,\n\n");

返回 JNI_OK;

}

JNIEXPORT void JNICALL Agent_OnUnload(JavaVM *vm) { }

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

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

java jdk版本javac 1.7.0_25

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

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

4

2 回答 2

5

这个问题现在已经很老了,但将来可能有人会偶然发现这个问题。

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

对于 Ubuntu 15.04 上的 Java 8,我在以下位置找到了文件夹

  • /usr/lib/jvm/java-1.8.0-openjdk-amd64/include
  • /usr/lib/jvm/java-1.8.0-openjdk-amd64/include/linux

在此目录中,您可以找到以下头文件:

  • classfile_constants.h
  • 下巴
  • jdwpTransport.h
  • jni.h
  • jvmticmlr.h
  • jvmti.h

编译器需要包含这些。

如果您使用的是 Netbeans,则可以通过项目的属性添加这些包含目录: 右键单击您的项目并选择

于 2015-11-18T09:07:56.617 回答
2

您需要使用-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 的路径 :-)

于 2013-10-25T10:53:26.363 回答