【发布时间】:2015-10-24 13:48:08
【问题描述】:
我正在尝试使用 Rust 创建一个静态可执行文件。我不是试图静态链接特定库,我正在尝试创建一个根本不使用动态链接的可执行文件。我有以下(否则工作)测试:
$ cat hello.rs
fn main()
{
print!("Hello, world!\n");
}
$ rustc hello.rs -o hello
$ file hello
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, [etc]
注意dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2。静态可执行文件有statically linked。 (在我的情况下是 corrupted section header size,尽管如果我能说服 Rust 复制 那个,我会非常惊讶。)
我需要将哪些选项传递给 rustc 以使其生成实际的静态可执行文件(具体而言:即使 file 同意的也是静态链接的)。
【问题讨论】:
-
也许 -C link-args='...' 选项可以帮助你?
-
请注意,您的问题仅适用于 Linux - AFAIK,you cannot statically link executables on OS X。我不确定 Windows。
-
这个internals thread 可能也很有趣。它也指向 musl。
-
@Mikhail,我不知道其他系统的确切细节,但在 linux 上(并给予或接受大多数其他 unix 的寄存器分配)
print触底(通过函数调用或内联)到mov eax,1 ; mov ebx,fdout ; mov ecx bufptr ; mov edx buflen。设计一个真正需要动态链接的系统调用接口可能可能,但对于通用操作系统,只有极度无能的人才会这样做。
标签: rust static-linking