如何修复致命错误 jvmti.h 没有这样的文件或目录编译终止 c 代码 ubuntu?
Posted
技术标签:
【中文标题】如何修复致命错误 jvmti.h 没有这样的文件或目录编译终止 c 代码 ubuntu?【英文标题】:how to fix fatal error jvmti.h No such file or directory compilation terminated c code ubuntu? 【发布时间】:2013-11-04 10:22:00 【问题描述】:我的 c 代码是:
包括“jvmti.h”
JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved)
/* 我们返回 JNI_OK 表示成功 */ printf("\n我的名字是,\n\n");
返回 JNI_OK;
JNIEXPORT 无效 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?
【问题讨论】:
【参考方案1】:这个问题现在已经很老了,但将来可能有人会偶然发现这个问题。
正如@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 jawt.h jdwpTransport.h jni.h jvmticmlr.h jvmti.h编译器需要包含的。
如果您使用的是 Netbeans,您可以通过项目的属性添加这些包含目录:
【讨论】:
【参考方案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 的路径 :-)
【讨论】:
感谢 Gyro Gearless 但我不明白...我使用的是 ubuntu 13.04 而不是 windows... gcc 在 Linux 和 Windows 上的行为相似。不幸的是,我没有 Linux 机器,但也许你可以在这里找到一些更好的例子:***.com/questions/3950635/…以上是关于如何修复致命错误 jvmti.h 没有这样的文件或目录编译终止 c 代码 ubuntu?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复:错误:'<filename>' 没有提交检查致命:输入“git add”时添加文件失败。在命令提示符下
linuxCentOS编译程序报错 修复 ./Modules/_ssl.c:64:25: 致命错误:openssl/rsa.h:没有那个文件或目录
致命错误 C1083:无法打开包含文件:'io.h':没有这样的文件或目录