首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用scala本机构建iOS应用程序

使用scala本机构建iOS应用程序
EN

Stack Overflow用户
提问于 2017-04-22 13:19:00
回答 1查看 1.2K关注 0票数 13

我试图使用scala本机在os x上构建一个iOS应用程序,并在进行sbt构建时遇到了许多问题。任何关于该做什么的提示都是受欢迎的。

我为build.sbt文件使用Xcode目录设置了iOS,如下所示:

代码语言:javascript
复制
    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文件(例如包装、时间、动态调度、gc、posix、see (c++)、展开和目标)完成初始编译时,我看不到向sbt编译命令行添加选项的方法。由于这些编译创建了.o文件(而不是.ll),一旦这些编译完成,目标平台就已经设置好了。下面是一个示例汇编: /Users/nnovod/tools/clang+llvm-4.0.0-x86_64-apple-darwin/bin/clang -I/usr/local/ -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本机代码时,我可以通过nativeCompileOptions添加选项,并将xcode模拟器sdk目录添加为系统根目录(-isysroot ./iPhoneSimator.10.3.sdk),尽管有关于“用x86_64-apple-ios10.3.0覆盖模块目标三重”的警告。
  • 链接时有两个问题:a)找不到gc库(我需要为iOS构建一个库吗?是波姆的交叉建筑吗?)(B)最初为MacOS完成的编译,现在与为iOS编写的编译相冲突。以下是sbt生成的链接命令: "/usr/bin/ld“-demangle -lto_library -dynamic -arch x86_64 -ios_simulator_version_min 10.3.0 -syslibroot -syslibroot -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//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 /User/nnovod/projects/ScalaNative.otarget/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./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 /User/nnovod/projects/ScalaNative.otarget/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./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 /User/nnovod/projects/ScalaNative塔吉特/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./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本机sbt代码进行重大修改吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-03-25 19:13:58

从LLVM IR的角度来看,这应该是可能的,而且几乎是被支持的(考虑到通过调试平滑粗糙的边缘是小白鼠)。但是,从您可以从Scala原住民调用的苹果框架的角度来看,您将无法从Scala原住民获得这些苹果框架,这意味着有效的答案是很难“不”使用Scala原住民在其当前的生态系统中作为在iPhone、iPad、Apple、Apple或Mac上编写iOS/iPadOS/MacOS应用程序的方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43559704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档