使用scala-native

时间:2017-04-22 13:19:00

标签: scala-native

我尝试使用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")
  • 当对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  
    
  • 编译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
    

我是否认为这一切都错了?我不是sbt专家,但是我是否需要对scala-native sbt代码进行重大修改?

谢谢。

1 个答案:

答案 0 :(得分:0)

从 LLVM IR 的角度来看,这应该是可能的,而且实际上几乎得到了支持(假设是豚鼠通过调试平滑粗糙边缘的工作)。但是从让您可以从 Scala Native 调用 Apple 框架的角度来看,您将无法从 Scala Native 使用这些 Apple 框架,这意味着对于在它目前的生态系统是一种在 iPhone、iPad、Apple Watch、Apple TV 或 Mac 上编写 iOS/iPadOS/MacOS 应用的方式。