Kotlin编译器在Raspberrypi2中构建失败

我试图在Ubuntu Mate 15.10上的Raspberrypi2中构建kotlin编译器

当我执行ant -f update_dependencies.xml并在构建过程中,下面出现错误。

 override-version: [echo] Requested URL https://teamcity.jetbrains.com/guestAuth/app/rest/builds/?locator=buildType:IntelliJMarkdownParser_Build,status:SUCCESS,tag:forKotlin,count:1 [echo] Build Number: 3174 - Kotlin 1.0.0-beta-5160 Build Id: 662124 [get] Getting: https://teamcity.jetbrains.com/guestAuth/app/rest/builds/id:662124/artifacts/content/markdown_jar/markdown.jar [get] To: /home/kyungkoo/Downloads/kotlin-build-1.0.0-beta-4584/dependencies/markdown.jar [get] Not modified - so not downloaded [exec] Exception in thread "main" java.lang.reflect.InvocationTargetException [exec] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [exec] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [exec] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [exec] at java.lang.reflect.Method.invoke(Method.java:497) [exec] at org.jetbrains.kotlin.preloading.Preloader.run(Preloader.java:73) [exec] at org.jetbrains.kotlin.preloading.Preloader.main(Preloader.java:35) [exec] Caused by: java.lang.UnsatisfiedLinkError: Could not load library. Reasons: [no jansi in java.library.path, /tmp/libjansi-32-2155791272664213050.so: /tmp/libjansi-32-2155791272664213050.so: cannot open shared object file: No such file or directory (Possible cause: can't load IA 32-bit .so on a ARM-bit platform)] [exec] at org.fusesource.hawtjni.runtime.Library.doLoad(Library.java:182) [exec] at org.fusesource.hawtjni.runtime.Library.load(Library.java:140) [exec] at org.fusesource.jansi.internal.CLibrary.<clinit>(CLibrary.java:37) [exec] at org.jetbrains.kotlin.cli.common.messages.PlainTextMessageRenderer.<clinit>(PlainTextMessageRenderer.java:35) [exec] at org.jetbrains.kotlin.cli.common.messages.MessageRenderer.<clinit>(MessageRenderer.java:29) [exec] at org.jetbrains.kotlin.cli.common.CLICompiler.exec(CLICompiler.java:57) [exec] at org.jetbrains.kotlin.cli.common.CLICompiler.doMainNoExit(CLICompiler.java:240) [exec] at org.jetbrains.kotlin.cli.common.CLICompiler.doMain(CLICompiler.java:231) [exec] at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler$Companion.main(K2JVMCompiler.kt:246) [exec] at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.main(K2JVMCompiler.kt) [exec] ... 6 more 

我安装了libjansi-javalibjansi-native-java但不起作用。 有什么想法解决这个问题?


我更新了soruce代码来build-1.0.0-beta-5569 <arg value="-Dkotlin.colors.enabled=false"/> build-1.0.0-beta-5569并添加了如下所示的<arg value="-Dkotlin.colors.enabled=false"/>

 --- a/update_dependencies.xml +++ b/update_dependencies.xml @@ -368,6 +368,7 @@ <macrodef name="build-protobuf-java-lite"> <sequential> <exec executable="dependencies/bootstrap-compiler/Kotlin/kotlinc/bin/${kotlinc.executable.path}" failonerror="true"> + <arg value="-Dkotlin.colors.enabled=false"/> <arg value="-script"/> <arg value="generators/infrastructure/build-protobuf-lite.kts"/> <arg value="${basedir}/ideaSDK/lib/protobuf-2.5.0.jar"/> @@ -419,6 +420,7 @@ <delete dir="${markdown.dir}" failonerror="false"/> <unzip src="dependencies/download/markdown-sources.zip" dest="dependencies"/> <exec executable="dependencies/bootstrap-compiler/Kotlin/kotlinc/bin/${kotlinc.executable.path}" failonerror="true"> + <arg value="-Dkotlin.colors.enabled=false"/> <arg value="${markdown.dir}/src"/> <arg value="-d"/> <arg value="${markdown.dir}/out"/> @@ -874,6 +876,7 @@ <echo message="URL: ${override.version.url} Version: ${override.version.build.number}"/> <exec executable="dependencies/bootstrap-compiler/Kotlin/kotlinc/bin/${kotlinc.executable.path}" failonerror="false"> + <arg value="-Dkotlin.colors.enbled=false"/> <arg value="-cp"/> <arg value="dependencies/bootstrap-compiler/Kotlin/kotlinc/lib/kotlin-compiler.jar"/> <arg value="-script"/> 

在finsiehd update_dependencies.xml ,我执行了ant -f build.xml ,出现以下错误:

 runner: [echo] Cleaning /home/kyungkoo/Downloads/kotlin-build-1.0.0-beta-5569/dist/classes/runner [mkdir] Created dir: /home/kyungkoo/Downloads/kotlin-build-1.0.0-beta-5569/dist/classes/runner [kotlinc] Compiling [/home/kyungkoo/Downloads/kotlin-build-1.0.0-beta-5569/compiler/cli/cli-runner/src] => [/home/kyungkoo/Downloads/kotlin-build-1.0.0-beta-5569/dist/classes/runner] BUILD FAILED /home/kyungkoo/Downloads/kotlin-build-1.0.0-beta-5569/build.xml:441: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.jetbrains.kotlin.ant.KotlinCompilerBaseTask.execute(KotlinCompilerBaseTask.kt:92) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) at org.apache.tools.ant.Task.perform(Task.java:348) at org.apache.tools.ant.Target.execute(Target.java:435) at org.apache.tools.ant.Target.performTasks(Target.java:456) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405) at org.apache.tools.ant.Project.executeTarget(Project.java:1376) at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) at org.apache.tools.ant.Project.executeTargets(Project.java:1260) at org.apache.tools.ant.Main.runBuild(Main.java:853) at org.apache.tools.ant.Main.startAnt(Main.java:235) at org.apache.tools.ant.launch.Launcher.run(Launcher.java:285) at org.apache.tools.ant.launch.Launcher.main(Launcher.java:112) Caused by: java.lang.UnsatisfiedLinkError: Could not load library. Reasons: [no jansi in java.library.path, /tmp/libjansi-32-7100610475620258495.so: /tmp/libjansi-32-7100610475620258495.so: cannot open shared object file: No such file or directory (Possible cause: can't load IA 32-bit .so on a ARM-bit platform)] at org.fusesource.hawtjni.runtime.Library.doLoad(Library.java:182) at org.fusesource.hawtjni.runtime.Library.load(Library.java:140) at org.fusesource.jansi.internal.CLibrary.<clinit>(CLibrary.java:37) at org.jetbrains.kotlin.cli.common.messages.PlainTextMessageRenderer.<clinit>(PlainTextMessageRenderer.java:35) at org.jetbrains.kotlin.cli.common.messages.MessageRenderer.<clinit>(MessageRenderer.java:29) at org.jetbrains.kotlin.cli.common.CLICompiler.execFullPathsInMessages(CLICompiler.java:69) ... 22 more Total time: 1 minute 3 seconds 

我修正了这样的build.xml

 diff --git a/build.xml b/build.xml index 38f751c..7bcfeb1 100644 --- a/build.xml +++ b/build.xml @@ -299,6 +299,7 @@ <java classname="org.jetbrains.kotlin.preloading.Preloader" failonerror="true" fork="true" maxmemory="${max.heap.size.for.forked.jvm}"> + <sysproperty key="kotlin.colors.enabled" value="true"/> <classpath> <pathelement location="${kotlin-home}/lib/kotlin-preloader.jar"/> </classpath> @@ -468,6 +469,7 @@ failonerror="true" fork="true" maxmemory="${max.heap.size.for.forked.jvm}"> + <sysproperty key="kotlin.colors.enabled" value="true"/> <assertions> <enable/> </assertions> @@ -732,6 +734,7 @@ <pathconvert property="src.line" refid="src.dirset" pathsep=" "/> <java classname="org.jetbrains.kotlin.preloading.Preloader" failonerror="true" fork="true" maxmemory="${max.heap.size.for.forked.jvm}"> + <sysproperty key="kotlin.colors.enabled" value="true"/> <classpath> <pathelement location="${kotlin-home}/lib/kotlin-preloader.jar"/> </classpath> @@ -771,6 +774,7 @@ <sequential> <java classname="org.jetbrains.kotlin.preloading.Preloader" failonerror="true" fork="true" maxmemory="${max.heap.size.for.forked.jvm}"> + <sysproperty key="kotlin.colors.enabled" value="true"/> <classpath> <pathelement location="${kotlin-home}/lib/kotlin-preloader.jar"/> </classpath> 

然后,我执行ant build。 ant -f build.xml -Dkotlin.colors.enabled=false 。 我不擅长ant 。 所以,我不能确定这是正确的语法。 但建立开始,我得到同样的错误。

 BUILD FAILED /home/kyungkoo/Downloads/kotlin-build-1.0.0-beta-5569/build.xml:442: java.lang.reflect.InvocationTargetException ... Caused by: java.lang.UnsatisfiedLinkError: Could not load library. Reasons: [no jansi in java.library.path, /tmp/libjansi-32-7323034426853998701.so: /tmp/libjansi-32-7323034426853998701.so: cannot open shared object file: No such file or directory (Possible cause: can't load IA 32-bit .so on a ARM-bit platform)] at org.fusesource.hawtjni.runtime.Library.doLoad(Library.java:182) at org.fusesource.hawtjni.runtime.Library.load(Library.java:140) at org.fusesource.jansi.internal.CLibrary.<clinit>(CLibrary.java:37) at org.jetbrains.kotlin.cli.common.messages.PlainTextMessageRenderer.<clinit>(PlainTextMessageRenderer.java:35) 

看起来像jansi本地库缺少树莓派。 我不确定它们是否可用,但是可以在构建Kotlin时安全地禁用它们,因为Kotlin编译器仅使用jansi向终端输出彩色的诊断消息。 要禁用颜色(因此使用jansi),请尝试在Kotlin项目的根目录中应用此修补程序:

 diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/PlainTextMessageRenderer.java b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/PlainTextMessageRenderer.java index e83309d..d4755e6 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/PlainTextMessageRenderer.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/messages/PlainTextMessageRenderer.java @@ -32,9 +32,7 @@ import static org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.* public abstract class PlainTextMessageRenderer implements MessageRenderer { // AnsiConsole doesn't check isatty() for stderr (see https://github.com/fusesource/jansi/pull/35). // TODO: investigate why ANSI escape codes on Windows only work in REPL for some reason - private static final boolean COLOR_ENABLED = - !SystemInfo.isWindows && - CLibrary.isatty(CLibrary.STDERR_FILENO) != 0; + private static final boolean COLOR_ENABLED = false; private static final String LINE_SEPARATOR = LineSeparator.getSystemLineSeparator().getSeparatorString(); 

我只是想让Kotlin在我的Raspberry Pi上工作。 我按照上面的链接 – https://youtrack.jetbrains.com/issue/KT-10605 – 从IRus。 从那里我看到,它确实检查一个属性禁用颜色,幸运的是。

所以,至少现在,直到变化被传播,你可以做到以下几点:

 kotlinc -Dkotlin.colors.enabled=false 

然后跳过那些试图加载非ARM共享库的部分。 至少它可以让我运行REPL。

我发现的另一种方法是像这样设置env变量JAVA_TOOL_OPTIONS:

 export JAVA_TOOL_OPTIONS="-Dkotlin.colors.enabled=false" 

这将被java vm拾取,然后你不需要每一个命令行(尽管它每次都吐出恼人的“Picked up message”。

Interesting Posts