1

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ましたが、動作しません。この問題を解決するアイデアはありますか?


ソースコードを更新し、以下のよう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"/>

finsiehdupdate_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 ビルドを実行します。 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)
4

3 に答える 3

3

Raspberry Pi の jansi ネイティブ ライブラリが見つからないようです。それらが利用可能かどうかはわかりませんが、Kotlin コンパイラは jansi のみを使用して色付きの診断メッセージを端末に出力するため、Kotlin のビルド中に安全に無効にすることができます。色の使用 (したがって 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();
于 2016-01-08T14:03:19.563 に答える