【问题标题】:Visual C++ Error: LNK2019, LNK2028 and LNK1120Visual C++ 错误:LNK2019、LNK2028 和 LNK1120
【发布时间】:2013-01-04 05:44:57
【问题描述】:

我正在开发一个基本应用程序,以创建 Java VM 并使用 JNI 从 C++ 启动 Java 程序。但是,我有一些编译错误:

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

有什么帮助吗?

【问题讨论】:

  • 这些是链接器错误,而不是编译器错误。它告诉您您缺少一些符号。您要么需要提供实现,要么为库获取它们。
  • 看来您确实忘记链接这两个函数所在的库。
  • JDK 提供了两个附加到链接器的.lib 文件。我附上了 jvm.lib 和jawt.lib(尽管我可能不需要后者)

标签: java c++ visual-c++ java-native-interface lnk2019


【解决方案1】:

您似乎没有链接 jvm.lib。您通常可以在%ProgramFiles%\Java\jdk1.X.XX_XX\lib 中找到它,然后您可以将它添加到您的链接器输入设置中。

此外,您需要在运行时加载 jvm.dll(并将其添加到延迟加载的 dll 中)。在 Windows 上,您可以从注册表中获取当前位置。查询SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersion 获取当前运行时版本,查询SOFTWARE\JavaSoft\Java Runtime Environment\<version>\RuntimeLib 获取jvm.dll 的路径。

使用这些路径,您还可以检查系统上是否存在所需的运行时版本。

【讨论】:

  • 路径明明是C:\Program Files\Java\jre6\bin\client\jvm.dll,但是目录C:\Program Files\Java\jre6\bin\client不存在...
  • @Klayderpus 这很奇怪,你确定java安装正确吗?在我的系统上,它就在那个位置。
  • 我会在早上重新安装 JRE 和 JDK……现在是凌晨 3 点,我需要睡觉。感谢您的帮助。
猜你喜欢
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 2023-03-27
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多