Windows终端使用Kotlin编译器运行基础程序时遭遇unresolved reference 'println'错误求助
我太懂你现在的烦躁了——不用IDEA,纯靠Kotlin独立编译器在Windows终端跑个最简单的Hello World,结果碰上个unresolved reference 'println'错误,还带了一堆看起来和IntelliJ有关的警告(但你明明没开IDEA!),网上搜的全是IDEA用户的解决方案,根本不适用,简直闹心。
先帮你梳理下问题,再给你几个针对性的解决步骤:
先排查最可能的几个原因
1. 代码里的引号是否正确?
你提到的代码里写的是println("Hello, World!"),这是HTML转义后的引号,实际存到hello.kt文件里的必须是英文双引号,也就是:
fun main() { println("Hello, World!") }
如果文件里是转义后的字符或者中文引号,编译器肯定识别不了,会导致找不到println的正确调用。
2. JDK版本兼容性问题
你用的是JDK24,这是非常新的版本,而Kotlin 2.2.10可能还没完全适配JDK24的模块系统和API变化,这很大概率是核心原因。试试这两个办法:
- 指定JVM目标版本编译:在编译命令里加上
-jvm-target参数,强制编译器针对一个更稳定的JDK版本生成代码,比如:
这里21是JDK的LTS版本,你可以换成你能正常运行的其他LTS版本(比如17)。kotlinc hello.kt -include-runtime -d hello.jar -jvm-target 21 - 暂时降级JDK到LTS版本:如果上面的办法没用,就下载JDK21或者JDK17,配置
JAVA_HOME指向这个JDK的安装目录,重启终端后再重新编译运行,最新的JDK版本和Kotlin编译器的适配通常需要一点时间。
3. Kotlin编译器文件是否完整?
有时候解压kotlin-compiler-2.2.10.zip时可能会丢文件,导致标准库(stdlib)没被正确加载,而println是stdlib里的函数。你可以重新解压这个压缩包,覆盖原来的文件,然后重启终端,确保环境变量里的PATH指向的是新解压的kotlinc/bin目录。
4. 环境变量是否有冲突?
检查你的系统环境变量,确保PATH里只有一个Kotlin编译器的bin路径,没有其他旧版本的Kotlin或者冲突的工具路径;同时确认JAVA_HOME指向的是正确的JDK目录,没有和其他JDK版本混淆。
验证步骤
当你做完上面的调整后,按顺序执行:
- 打开终端,进入hello.kt所在的文件夹
- 运行编译命令(比如带-jvm-target的版本)
- 如果编译成功,运行
java -jar hello.jar,正常的话就能看到Hello, World!的输出了
另外,那些关于sun.misc.Unsafe的警告不用管,这是Kotlin编译器内部依赖的一些类的提示,不影响你的程序编译和运行,完全可以忽略。
内容来源于stack exchange




