2013-10-25 117 views
4

如何修復致命錯誤jvmti.h沒有這樣的文件或目錄編譯終止c代碼ubuntu?我的C代碼:如何修復致命錯誤jvmti.h沒有這樣的文件或目錄編譯終止c代碼ubuntu?

包括 「jvmti.h」

JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM的* JVM,字符*選項,無效*保留) {

/*回到JNI_OK來表示成功*/ printf(「\ nmy name is,\ n \ n」);

return 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?

回答

2

您需要告訴gcc使用-I選項可以找到它的包含文件。以下是構建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的路徑:-)

+0

由於陀螺儀無齒輪,但我不明白... IAM使用Ubuntu 13.04沒有窗戶... –

+1

gcc在Linux和Windows上表現類似。不幸的是,我沒有接觸到Linux的盒子,但也許你可以在這裏找到一些更好的例子:http://stackoverflow.com/questions/3950635/how-to-compile-dynamic-library-for-a-jni-application-在Linux的/ 3950649#3950649 –

3

這個問題現在已經很老了,但可能有人會在將來偶然發現這一點。

正如@Gyro Gearless已經提到的那樣,您需要指定「包含目錄」。

對於Java 8在Ubuntu 15.04,我發現文件夾在

  • /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可以添加那些包括通過項目的屬性目錄: Right-click on you Project and select "Properties"

相關問題