Rustで静的実行可能ファイルを作成しようとしています。私はnot特定のライブラリを静的にリンクしようとしています。動的リンクをまったく使用しないの実行可能ファイルを作成しようとしています。私は次の(そうでなければ機能する)テストをしています:
$ 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 to replicate that ..)
実際の静的実行可能ファイルを生成するためにrustc
に渡す必要があるオプションは何ですか(具体的には、file
でも同意するものは静的にリンクされます)。
Rustはデフォルトでglibc(およびlibgcc、iirc)を除くすべてを静的にリンクします。
100%静的にリンクされたバイナリを取得する場合は、1.1でMUSLを使用できます。 https://github.com/Rust-lang/Rust/pull/24777 が初期サポートです。将来的にはさらに使いやすくなることを願っています。
Rust 1.19 なので、Cランタイム(CRT)を静的にリンクして、Windowsでこの非常に一般的な状況を回避できます。
コンピューターにVCRUNTIME140.dllが見つからないため、プログラムを開始できません。プログラムを再インストールして、この問題を修正してください。
これを.cargo/config
ファイルに追加し、プラットフォームに適したターゲットトリプルを使用します。
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]
.cargo/config
を編集する代わりに、-C target-feature=+crt-static
を手動でrustcに渡すこともできます。
以下も参照してください。