
[英]How seamless will be dotty/scala3 integration with tech like scala-native and scala-js?
[英]How do I build a statically linked executable with scala-native?
我想使用 Scala Native 编写一个程序,但它必须在具有非常旧的 glibc 的 linux 主机(centos 6.5)上运行。 所以我想将该程序部署为静态链接的可执行文件,例如 golang 所做的。
如何使用 scala-native 构建静态链接的可执行文件? 是否可以? 如果是,我该怎么做? 如果没有,为什么不呢?
sbt 选项nativeLinkingOptions
接受额外参数的Seq[String]
,这些参数在链接期间逐字传递给 clang。
在快速测试中,将以下内容添加到项目构建设置中对我有用:
nativeLinkingOptions += "-static"
我不是这个主题的专家,但据我了解,这并不是对所有类型的应用程序都可以做到的,根据你的依赖库,它甚至可能是不可能做到的;
例如,您不能针对glibc
进行静态链接(它不是设计为可静态链接的,并且具有像 nss 这样的动态功能,可以防止它被静态链接)。
您可以尝试另一个 libc 实现,例如静态可链接的musl
,但是您需要从头开始编译很多东西,最后,您的 output 二进制文件可能会有一些奇怪的行为,例如名称解析可能不起作用,您需要使用直接 IP 地址,除非也使用解析器库。
这是一个你可能不想参与的兔子洞!
但是,如果您知道自己在做什么并且也是一位经验丰富的 C/C++ 开发人员,则可以按照其他答案中提到的 linker 参数进行调整; 但是您可能需要手动链接,因为当前可用的 sbt 选项不允许您更改现有链接参数的顺序,不幸的是,这在静态链接时很重要!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.