【问题标题】:GraalVM native-image fundamental linker errorGraalVM native-image 基本链接器错误
【发布时间】:2020-07-22 10:18:33
【问题描述】:

我正在尝试使用 graalVM v20.0.0 CE 创建一个简单的 hello world 原生映像。

最初我遇到“本机工具链”错误,但从“x86 Native Tools Command Prompt for VS2017”启动命令行后,我克服了这个障碍。

现在的问题是一串链接器错误:

java.lib(jni_util.obj) : 错误 LNK2019: 函数 JNU_PrintString 中引用的未解析的外部符号 __imp_fprintf

java.lib(jni_util.obj) : 错误 LNK2019: 函数 JNU_PrintString 中引用的未解析的外部符号 __imp___iob_func

net.lib(net_util_md.obj):错误 LNK2019:函数 NET_ThrowNew 中引用的未解析的外部符号 __imp_sprintf

net.lib(net_util_md.obj) : 错误 LNK2019: 函数 dumpAddr 中引用的未解析的外部符号 __imp_printf

jvm.lib(JvmFuncs.obj) : error LNK2019: unresolved external symbol __imp_vfprintf referenced in function jio_vfprintf

jvm.lib(JvmFuncs.obj) : error LNK2019: unresolved external symbol __imp_vsnprintf referenced in function jio_vsnprintf

MSVCRT.lib(vsnprintf.obj) : error LNK2001: unresolved external symbol __imp_vsnprintf

MSVCRT.lib(vsnprintf.obj) : 错误 LNK2001: 无法解析的外部符号 __imp__vsnprintf

D:\Tools\graalvm-ce-java8-20.0.0\bin\helloworld.exe : 致命错误 LNK1120: 7 unresolved externals

这些似乎都与最基本的函数调用直接相关,printf

我查看了native-image 的命令行选项,并希望明确设置--shared--static 可以解决问题,但没有骰子。其他本机映像命令行选项看起来都不相关。

我进一步尝试从同一命令提示符的 VS2015 版本开始。没有。

所以我被困住了。除了获取 graalvm 的源代码并对其进行破解之外,我还能解决这个问题吗?

【问题讨论】:

  • 我刚刚发现了如何列出所有-H 选项:“native-image -H:PrintFlags="。有许多页面可供选择。很有希望。
  • 我看到类似的错误报告(相同的缺失功能),人们从 VS2013 转换到 VS2015。是native-image和VS2013共同构建的吗?
  • 在 graal/bin 中的几个 .exe 文件的内脏中四处寻找,它们都依赖于 MSVCR100.dll,它与 Visual Studio 2010 一起发布。当我使用 2017 和2015 年的环境,看来我搞砸了。
  • 我一直在使用 Java 8 构建。我希望 Java 11 构建将使用更现代的后端。

标签: visual-studio visual-studio-2017 linker graalvm-native-image


【解决方案1】:

我从 GraalVM 的 Java 8 构建切换到他们的 Java 11 构建 gu install native-image,现在我的 helloworld 在上述 VS2017 命令提示符下完成后转换为本机映像就好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多