2013-01-21 173 views
0

我正在研究一個基本的應用程序來創建一個Java VM,並使用JNI從C++啓動一個Java程序。但是,我有一些編譯錯誤:Visual C++錯誤:LNK2019,LNK2028和LNK1120

Error 6 error LNK2028: unresolved token (0A00000D) "extern "C" long __stdcall JNI_CreateJavaVM(struct JavaVM_ * *,void * *,void *)" ([email protected]@[email protected]@[email protected]) referenced in function "public: bool __clrcall JarLauncher::launchJar(void)" ([email protected]@@$$FQ$AAM_NXZ) 
Error 5 error LNK2028: unresolved token (0A00000C) "extern "C" long __stdcall JNI_GetDefaultJavaVMInitArgs(void *)" ([email protected]@[email protected]) referenced in function "public: bool __clrcall JarLauncher::launchJar(void)" ([email protected]@@$$FQ$AAM_NXZ)  
Error 7 error LNK2019: unresolved external symbol "extern "C" long __stdcall JNI_GetDefaultJavaVMInitArgs(void *)" ([email protected]@[email protected]) referenced in function "public: bool __clrcall JarLauncher::launchJar(void)" ([email protected]@@$$FQ$AAM_NXZ) 
Error 8 error LNK2019: unresolved external symbol "extern "C" long __stdcall JNI_CreateJavaVM(struct JavaVM_ * *,void * *,void *)" ([email protected]@[email protected]@[email protected]) referenced in function "public: bool __clrcall JarLauncher::launchJar(void)" ([email protected]@@$$FQ$AAM_NXZ) 
Error 9 error LNK1120: 4 unresolved externals 

任何幫助嗎?

+0

這些是鏈接器錯誤,而不是編譯器錯誤。它告訴你你錯過了一些符號。你或者需要提供實現或者爲圖書館獲取它們。 –

+0

似乎你忘了鏈接圖書館這兩個函數reisde。 –

+0

JDK提供了兩個連接到鏈接器的.lib文件。我附加了jvm.lib和jawt.lib(儘管我可能不需要後者) – Klayderpus

回答

0

看起來你沒有鏈接jvm.lib。您通常會在%ProgramFiles%\Java\jdk1.X.XX_XX\lib中找到它,然後您可以將其添加到鏈接器輸入設置。

此外,您需要在運行時加載jvm.dll(並將其添加到延遲加載的dll中)。在Windows上,您可以從註冊表中獲取當前位置。查詢當前運行時版本的SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersion,查找jvm.dll的路徑SOFTWARE\JavaSoft\Java Runtime Environment\<version>\RuntimeLib

使用這些路徑,您還可以檢查系統上是否存在所需的運行時版本。

+0

路徑顯然是C:\ Program Files \ Java \ jre6 \ bin \ client \ jvm.dll,但目錄C :\ Program Files \ Java \ jre6 \ bin \ client不存在... – Klayderpus

+0

@Klayderpus這很奇怪,你確定java安裝正確嗎?在我的系統中,它恰好在那個位置。 – Botz3000

+0

我會在早上做一個全新的JRE和JDK安裝...現在是凌晨3點,我需要一些睡眠。謝謝您的幫助。 – Klayderpus