我正在尝试使用scala-native在os x上构建一个iOS应用程序,并在执行sbt构建时遇到许多问题.任何关于做什么的提示都是受欢迎的.
我使用Xcode目录为iOS文件设置build.sbt,如下所示:
nativeCompileOptions := Seq("-v",
"-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk")
nativeLinkingOptions := Seq("-v",
"-I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include",
"-L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib",
"-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk")
Run Code Online (Sandbox Code Playgroud)
当对nativelib中包含的c文件进行初始编译时(例如,换行,时间,dyndispatch,gc,posix,eh(c ++),展开和目标)我无法看到为sbt编译添加选项的方法命令行.由于这些编译创建了.o文件(而不是.ll),因此一旦这些编译完成,目标平台就已经设置好了.示例编译如下:
/Users/nnovod/tools/clang+llvm-4.0.0-x86_64-apple-darwin/bin/clang
-I/usr/local/include
-I/Users/nnovod/tools/clang+llvm-4.0.0-x86_64-apple-darwin/include
-c
/Users/nnovod/projects/scalaNative/target/scala-2.11/nativelib/posix.c
-o
/Users/nnovod/projects/scalaNative/target/scala-2.11/nativelib/posix.c.o
Run Code Online (Sandbox Code Playgroud)在编译scala-native代码时,我可以通过nativeCompileOptions添加选项,并添加xcode模拟器sdk目录作为系统根目录(-isysroot .../iPhoneSimulator.10.3.sdk)似乎可以解决问题,尽管有关于"使用x86_64-apple-ios10.3.0覆盖模块目标三元组"
链接时存在两个问题:a)找不到gc库(我是否需要为iOS构建一个?Boehm的交叉构建?)b)为MacOS完成的初始编译,现在与iOS完成的编译冲突.以下是sbt生成的链接命令:
"/usr/bin/ld" -demangle -lto_library /Users/nnovod/tools/clang+llvm-4.0.0-x86_64-apple-darwin/lib/libLTO.dylib -dynamic -arch x86_64 -ios_simulator_version_min 10.3.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk -o /Users/nnovod/projects/scalaNative/target/scala-2.11/scalanative-out -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib -lgc /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/__const.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/__dispatch.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/__empty.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/__extern.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/__instance.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/__main.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/example.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/java.io.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/java.lang.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/java.lang.reflect.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/java.nio.charset.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/java.nio.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/java.util.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/niocharset.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.collection.generic.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.collection.immutable.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.collection.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.collection.mutable.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.collection.script.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.compat.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.io.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.math.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.reflect.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.runtime.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.scalanative.native.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.scalanative.runtime.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.util.control.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.util.hashing.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/ll/scala.util.ll.o /Users/nnovod/projects/scalaNative/target/scala-2.11/nativelib/dyndispatch.c.o /Users/nnovod/projects/scalaNative/target/scala-2.11/nativelib/eh.cpp.o /Users/nnovod/projects/scalaNative/target/scala-2.11/nativelib/gc.c.o /Users/nnovod/projects/scalaNative/target/scala-2.11/nativelib/posix.c.o /Users/nnovod/projects/scalaNative/target/scala-2.11/nativelib/time.c.o /Users/nnovod/projects/scalaNative/target/scala-2.11/nativelib/unwind.c.o /Users/nnovod/projects/scalaNative/target/scala-2.11/nativelib/wrap.c.o -lc++ -lSystem /Users/nnovod/tools/clang+llvm-4.0.0-x86_64-apple-darwin/bin/../lib/clang/4.0.0/lib/darwin/libclang_rt.ios.a …
Run Code Online (Sandbox Code Playgroud)最近发布了Scala native,但他们使用的垃圾收集器(目前)非常简陋,并且不适合严肃使用.
所以我想知道:为什么不将Scala转换为Go(一个scala.js)?它将是一个快速,可移植的运行时.他们的GC越来越好了.更不用说伟大的并发模型的继承:渠道和goroutines.
我想使用 Scala Native 编写一个程序,但它必须在带有非常旧的 glibc 的 linux 主机(centos 6.5)上运行。所以我想将该程序部署为静态链接的可执行文件,例如 golang。
如何使用 Scala-native 构建静态链接的可执行文件?是否可以?如果是,我该怎么做?如果没有,为什么不呢?
我想知道是否有可能利用scala-native来执行大型内存中的工作.
例如,假设您有一个需要150GB RAM的spark作业,因此您必须在Spark集群中运行5x30GB执行程序,因为JVM垃圾收集器无法赶上堆大于此的堆.
想象一下,99%的正在处理的数据都Strings
在集合中.
你认为scala-native会对你有帮助吗?我的意思是,作为Spark的替代品?
它是如何对待的String
?它是否也有这个开销,因为jvm将它视为类?
在JVM的情况下,内存("堆")GC限制为经典的30GB?我最终还会达到30GB的限制吗?
或者这通常是个坏主意?使用scala-native进行内存数据处理.我的猜测是scala-offheap是更好的方式.
目前 ScalaNative 是单线程的。但是我们可以使用 POSIX API(例如)来创建和管理线程(以及共享资源)。
我的问题与垃圾收集器有关:
当我使用sbt构建Scala本机演示时,rtlib/publishLocal
nscplugin/publishLocal
它会出现以下错误
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
Run Code Online (Sandbox Code Playgroud)
Scala代码运行版本 2.12.0-M3 -- Copyright 2002-2015, LAMP/EPFL
错误
[info] Loading project definition from D:\Work\RandD\WSAMITScript\Scala-Native\scala-native\project
java.io.IOException: Cannot run program "which": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at sbt.SimpleProcessBuilder.run(ProcessImpl.scala:349)
at sbt.AbstractProcessBuilder.lines(ProcessImpl.scala:149)
at sbt.AbstractProcessBuilder.lines_$bang(ProcessImpl.scala:143)
at scala.scalanative.sbtplugin.ScalaNative
Run Code Online (Sandbox Code Playgroud)