【发布时间】: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