[英]Kotlin Compiler build fail in 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-java
和libjansi-native-java
但它不起作用。 有什么想法可以解決這個問題?
我將soruce代碼更新為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)
看起來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();
我只是想讓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'。
由jetbrains開發的命令行Kotlin編譯器可以作為快照包安裝在所有當前支持的Ubuntu版本中。 要安裝它,請打開終端並鍵入:
sudo snap install kotlin --classic
可用工具:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.