Сбой сборки компилятора Kotlin в Raspberrypi2
Я пытался собрать компилятор kotlin в Raspberrypi2 на Ubuntu Mate 15.10
Когда я выполню 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-java
а также libjansi-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"/>
После финсьехд 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 -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)
3 ответа
Похоже, для Raspberry Pi отсутствуют нативные библиотеки 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();
Я просто пытался заставить Котлина поработать над моим 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').
Компилятор командной строки Kotlin, разработанный Jetbrains, может быть установлен как пакет оснастки во всех поддерживаемых в настоящее время версиях Ubuntu. Чтобы установить его, откройте терминал и введите:
sudo snap install kotlin --classic
Доступные инструменты:
- kotlinc
- kotlinc-JVM
- kotlinc-JS
- Котлин-АКД-JS