如何使用scala-native构建静态链接的可执行文件?

9
我想使用Scala Native编写程序,但它必须在一个带有非常旧的glibc的Linux主机(CentOS 6.5)上运行。因此,我想将该程序部署为静态链接可执行文件,例如Go语言所做的那样。
如何使用Scala Native构建静态链接可执行文件?是否可能?如果可以,如何操作?如果不行,为什么?

我也在寻找这个问题的答案。如果你已经得到了这个问题的答案,请在答案部分添加它。那会很有帮助的。 - aru_sha4
2个回答

0

sbt选项nativeLinkingOptions接受一个Seq[String]的额外参数,这些参数会原封不动地传递给clang进行链接。

在项目构建设置中添加以下内容对我进行了快速测试:

nativeLinkingOptions += "-static"

0

我不是这个主题的专家,但从我的理解来看,并非所有类型的应用程序都可以做到这一点,甚至可能基于您的依赖库而言是不可能的;

例如,您无法静态链接到glibc(它不是设计为可静态链接的,并且具有像nss这样的动态功能,防止其被静态链接)。

您可以尝试另一个libc实现,如musl,它是可静态链接的,但是您需要从头开始编译很多东西,最终,您的输出二进制文件可能会出现一些奇怪的行为,例如名称解析可能无法工作,除非您也使用了解析器库。

那是一个你可能不想去的兔子洞!

但是,如果您也是经验丰富的C/C++开发人员,您可以像其他答案中提到的那样调整链接器参数;但是您可能需要手动链接,因为当前可用的sbt选项不允许您更改现有链接参数的顺序,这在静态链接时非常重要!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接