본문으로 건너뛰기

./a.out만이 아니라 .dylib, .so도 함께 — Rust 분리 빌드

Rust 워크스페이스에서 prefer-dynamic = true를 설정하면 릴리즈 빌드 시 동적 라이브러리 링킹을 활용할 수 있다. 빌드 속도와 바이너리 크기 최적화에 유용하다.

WorkSpace Cargo.toml

WorkSpace

[workspace]
# authors: KuuwangE <root@ql.gl>
# author repo https://github.com/shellcodesniper

resolver = "2"

members = [
"entry", # NOTE : Entry point
]

default-members = [
"entry",
]

[profile.dev]
prefer-dynamic = false # NOTE : Prefer dynamic linking
opt-level = 0
debug = true

[profile.release]
prefer-dynamic = true # NOTE : Prefer dynamic linking
opt-level = 3
debug = false
lto = true
# split-debuginfo = "unpacked"

-> Result Will be

SC_ 2023-07-03 오후 8.49.13

Prevent "Could not found libstd-~~~.so"

ADD THIS to binary module Cargo.toml

[dependencies]
prefer-dynamic = "0"

[dev-dependencies]
prefer-dynamic = { version = "0", features = ["link-test"] }


But... If Error Still Occurs,

Try this

MAC OS X

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$PWD"
sudo ldconfig
./a.out

LINUX

export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$PWD"
./a.out