LLVM 4.0์ LLD๊ฐ ํ์ฑํ๋ ์ํ๋ก ๋ฐฐ์ก๋์ง๋ง AFAIK๋ ์์ง ๋ชจ๋ ํ๋ซํผ์์ ํ๋ก๋์ ์ค๋น๊ฐ ๋์ง ์์์ต๋๋ค. ์ด์จ๋ AVR/emscripten ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณง LLVM ์ ๊ทธ๋ ์ด๋๊ฐ ๊ณํ๋์ด ์๋ค๊ณ ์๊ฐํ๋ฏ๋ก ์ด์ ์ด๋ฅผ ์ง์ํ๊ธฐ ์ํด ํด์ผ ํ ์ผ, ์ด๊ฒ์ด ์ปดํ์ผ๋ฌ ์ฑ๋ฅ/๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ/๋ฐํ์ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ๊ฒฐ์ ํ๊ธฐ ์์ํ ๋์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๋ง์ปค ๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํํ ์ ์๋ ํ๋ซํผ.
ํํฉ(2020-04-24) ์์ฝ https://github.com/rust-lang/rust/issues/39915#issuecomment -618726211
# 36120์ PoC๋ ์ฐธ์กฐํ์ญ์์ค.
LLD๋ ํ์ฌ ๋ง์ปค๋ฅผ ์ด์จ๋ ๋ฒ๋ค๋ก ๋ฌถ๊ณ ์๊ณ MinGW์ ๋ง์ปค์๋ ASLR ๋ถ์กฑ์์ bigobj ์ง์ ์์์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ LLD๋ MinGW ๋์์ ๋ํ ๋งค์ฐ ์ข์ ํ๋ณด์ผ ์ ์์ต๋๋ค. ๋ค์ดํฐ๋ธ ํ๊ฒํ (ํ์ฌ Rustup์ mingw ํจํค์ง๋ ํ์ฌ ์ ํ๋์ด ์์)๋ฟ๋ง ์๋๋ผ ํฌ๋ก์ค ์ปดํ์ผํ ๋ ํ์ํ mingw ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก Linux์์ Rust ํฌ๋ก์ค ์ปดํ์ผ์ ์ฌ์ฉํ ์ ์๊ฒ ๋์ด ์์ฒญ๋ ๊ฐ์ ์ด ๋ ๊ฒ์ ๋๋ค. ์ฌ๋๋ค์ด ๋ฐฐํฌํ์์ MinGW๋ฅผ ์ป์ ๋ค์ ๋ฐฐํฌํ์ด ๊ฑฐ์ ํญ์ ํธํ๋์ง ์๋ MinGW๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ธฐ์กด ์ํฉ๋ณด๋ค.
LLD๋ ๋ช ๊ฐ์ง ์ด์ ๋ก ์ธํด ๊ธฐ๋ณธ์ ์ผ๋ก MSVC ๋์์ ๋์์ผ๋ก ํ๋ ์ข์ ํ๋ณด๊ฐ ์๋๋๋ค . ์ฃผ๋ ์ด์ ๋ debuginfo ์ง์์ด ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ๋๋ค. MSVC ๋์์ผ๋ก ํฌ๋ก์ค ์ปดํ์ผํ๋ ค๋ฉด ์ฌ๋ฐฐํฌํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ๋ฏ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ ์ ์์ต๋๋ค.
LLVM 4.0์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๊ธฐ ์ํ ์ถ์ ๋ฌธ์ ๋ https://github.com/rust-lang/rust/issues/37609 ์ ๋๋ค.
๋ ์ฝ๋ lld๋ ํ์คํ Solaris ๋์์ ๋ํด ์ค๋น๋์ง ์์์ต๋๋ค. ๊ทธ๋ฌ๋ Solaris์์๋ ๊ธฐ๋ณธ ld ๋์ lld๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ์ ์๊ณ ์๋ ์ด์ ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ Rust๊ฐ ๋งํฌ๋ฅผ ์ํด gcc๋ฅผ ์ฌ์ฉํ๋ ๋์ Solaris์์ Solaris ld๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ ค๋ฉด ๋ฌด์์ด ํ์ํ์ง ์ดํด๋ณด์์ต๋๋ค.
ํ์ง Solaris์์, Solaris ์ฉ ๋น๋ ํ ๋ ์ฌ์ฉ LLD์ @binarycrusader ์ด์ ์ค ํ๋์ ๋๋ค.
PR Rust-lang/rust#40018์ LLD๋ฅผ ๋ง์ปค๋ก ์ฌ์ฉํ ์ ์๋๋ก rustc์ -Z linker-flavor
ํ๋๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ํด๋น PR์ Rustc์ LLD๋ฅผ ํฌํจํ์ง ์์ง๋ง ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ์ธ๋ถ ์คํ์ ํ์ฉํฉ๋๋ค.
@binarycrusader ^ gcc ๋์ Solaris์ ld๋ฅผ ์ง์ ์ฌ์ฉํ๋ ์คํ์ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ด์ LLVM 4.0์์ ์คํ ์ค์ธ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. @japaric , ์ด๊ฒ์ ์ด์ ๋ง์ปค ํ๋ฏธ ํ๋๊ทธ๋ฅผ ์์คํ ๋ง์ปค์ LLD๋ฅผ ๋น๊ตํ๊ณ ๋์กฐํ๋ ๋ฐ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํฉ๋๊น?
@bstrie #40018์ด ๋ช ์ฃผ ์ ์ ๋์ฐฉํ์ต๋๋ค. ๊ทธ ์ฐฉ๋ฅ ์ดํ๋ก -Z linker-flavor=ld -C linker=ld.lld
๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ LLD ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ง์ปค๋ก ์ฌ์ฉํ ์ ์์์ต๋๋ค. gcc์ ๋ฌ๋ฆฌ LLD๋ ์์คํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋์ ์๋์ง ์์ง ๋ชปํ๋ฏ๋ก ์์คํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋งํฌํ๋ ๊ฒฝ์ฐ -C link-args='-L ...'
์ฌ์ฉํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฒ์ ๊ฒฝ๋ก๋ฅผ ๋ง์ปค์ ์ ๋ฌํด์ผ ํฉ๋๋ค.
LLVM 4.0์ด ๋์์ด ๋๋ ๊ฒ์ LLD๋ฅผ rustc๋ก ๋ณํฉํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ์ผ๋ก MUSL ๋ฐ์ด๋๋ฆฌ ๋๋ ๋ฒ ์ด๋ฉํ ํ๋ก๊ทธ๋จ ์ฐ๊ฒฐ๊ณผ ๊ฐ์ ์ผ๋ถ ์๋๋ฆฌ์ค์์ ์ธ๋ถ ๋ง์ปค๊ฐ ํ์ํ์ง ์์ต๋๋ค. ๋ด๊ฐ ์์์ ์ธ๊ธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฒ์ ๊ฒฝ๋ก ๋ฌธ์ ์ ๋ถ๋ชํ ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋งํฌ๊ฐ ๋๋ถ๋ถ์ ๋์์ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ช ๊ฐ์ง ์๋๋ฆฌ์ค๋ฅผ ๋งํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋์์ ๊ฒฝ์ฐ LLD๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ํ์ง ์์ต๋๋ค. ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ๊ณผ ์์น๊ฐ ๋ช ํํ์ง ์์ผ๋ฉฐ ์ด์ ๋ํ ์๋ฃจ์ ์ด ์์ผ๋ฉด ๊ฐ์ฅ ์ค์ํ(๊ณ์ธต 1) ๋์์ ๋ํด LLD๋ก ์ ํํ ์ ์์ต๋๋ค.
@japaric (sysroot ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ) ๊ฒ์ ๊ฒฝ๋ก์ -lc -lpthread crt0.o
์ ๊ฐ์ ํญ๋ชฉ์ ์ง์ rustc์ ์ฝ์
ํ๋ ๊ฒ์ ๋ํ ์ฃผ์ฅ์ ๋ฌด์์
๋๊น? ๊ฒฐ๊ตญ ํ๋ซํผ์ ๋ํ ํ์ค์ด ์๊ธฐ ๋๋ฌธ์ ๋๊ตฌ ์ฒด์ธ์ ์ผ๋ถ ๊ตฌ์ฑ ์์์ ํฌํจํด์ผ ํ๋ฉฐ binutils๋ ์ด๋ฌํ ์ง์์ ์ข์ ํฉ๊ธ ์์ค๊ฐ ์๋๋๋ค.
๋ด๊ฐ ์๊ฐํ ์ ์๋ ์ ์ผํ ๋จ์ ์ ๋์ผํ ํธ๋ฆฌํ์ด ์๋ก ๋ค๋ฅธ ์ข ๋ฅ์ ์์คํ ์์ ์๋ก ๋ค๋ฅธ ๊ฒ์ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋ ์ํฉ์ด๋ผ๋ ๊ฒ์ ๋๋ค(์ด๋ Linux/glibc ํธ๋ฆฌํ์๋ง ํด๋น๋๋ฉฐ ํนํ multilib๊ฐ ์๋ ํ๋ซํผ์์๋ ์ข์ง ์์). ์ด ๊ฒฝ์ฐ, ๋๋ clang์ด OS ์ด๋ฆ์ ์ค๋ํํ๊ณ OS๋ณ ๊ท์น์ ํ๋์ฝ๋ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ ์ข์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง Linux์์ ์คํ๋๋ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฐฐํฌํ๋ ค๋ ๊ฒฝ์ฐ(์์คํ ๋ง์ปค๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ) ํผํ ์ ์๋ ๊ฒ์ ๋๋ค.
@retep998 ๋ช ๋ฌ ์ ์ lld๋ฅผ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด์์ต๋๋ค. Linux์์ .exe๋ฅผ ํฌ๋ก์ค ์ปดํ์ผ(ํฌ๋ก์ค ๋งํฌ?)ํ ์ ์์์ต๋๋ค. lld๋ ํ๋ซํผ ๊ธฐ๋ณธ ํ์๋ง ์ง์ํ๋ ๊ฒ ๊ฐ์์ต๋๋ค.
๋ด๊ฐ ํ๋ ธ์ผ๋ฉด ์ข๊ฒ ์ด.
LLD์ ๋ฒค์น๋งํฌ์ ๋ฐ๋ฅด๋ฉด GNU ld๋ณด๋ค ์ฑ๋ฅ์ด 10๋ฐฐ ๋ ์ฐ์ํ๊ณ ์ฐ๊ฒฐ ์ฑ๋ฅ์ด ํ์ฌ ์ปดํ์ผ๋ฌ ์๋์ ํฐ ๊ตฌ์ฑ ์์์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ฑ๋ฅ ๋ฒ๊ทธ๋ก ํ๊ทธ ์ง์ ํฉ๋๋ค.
์ด, ๋ฒค์น๋งํฌ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ ์์์ต๋๋ค: https://lld.llvm.org/#performance
(LLVM 5.0์ด ๋ฐฉ๊ธ ์ถ์๋ ์ดํ ์ค๋ ๊ด๋ จ๋จ.)
LLD์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด bfd๋ gold๋ณด๋ค ํจ์ฌ ๋น ๋ฅด์ง๋ง ์ฌ์ฉํ๋ฉด ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ ์ง๋ ์๋ฌธ์ ๋๋ค. ๊ทธ๋๋ ์ ๋ ์ด ๋ฌธ์ ๊ฐ ์ค์ํ๊ณ ์ฐ์ ์์๊ฐ ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@tpimh ์ค์ ๋ก I-slow ํ๊ทธ๊ฐ ๋ฐํ์ ์ฑ๋ฅ ๋ฒ๊ทธ ๋๋ ์ปดํ์ผ ํ์ ์ฑ๋ฅ ๋ฒ๊ทธ๋ฅผ ๋ํ๋ด๋์ง ์ฌ๋ถ๋ฅผ ์์ ํ ํ์ ํ ์ ์์ง๋ง ํ์๋ก ์๋ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ์๊ฐ ๊ฒฝ๊ณผ ์ถ๋ ฅ ์ฐ๊ฒฐ์ ๋ณผ ๋ IME๋ ์ผ๋ฐ์ ์ผ๋ก ๋๋ถ๋ถ์ ๊ฒ๋ณด๋ค ํจ์ฌ ๊ธด ์์ 3๊ฐ์ ๊ฐ์ฅ ๊ธด ๋จ๊ณ์ ์์ผ๋ฏ๋ก ์ฐ๊ฒฐ ์๊ฐ์ ์ ๋ฐ์ผ๋ก ์ค์ด๋ ๊ฒ์กฐ์ฐจ ์๋ง๋ ํฐ ์น๋ฆฌ๊ฐ ๋ ๊ฒ์ ๋๋ค(ํนํ Servo ๋ฐ rustc์ ๊ฐ์ ํฐ ๊ฒฝ์ฐ).
@bstrie I-slow๋ ๋์ ๋ฐํ์ ์ฑ๋ฅ์ ์ํ
Linux์์ Windows๋ก์ ๊ต์ฐจ ๋งํฌ๋ผ๋ ๋ชจํธํ ์ฃผ์ ์ ๊ด์ฌ์ด ์๋ ๋ชจ๋ ์ฌ๋์๊ฒ ํฌ์์์ ๋๋ค. ์ด์ ์ lld๋ก๋ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ๋งํ์ง๋ง ์ด๋ lld์ ld ํ๋ฏธ์๋ง ํด๋น๋ฉ๋๋ค. lld์ link.exe ๋ง(lld-link)์ด ๊ฐ๋ฅํฉ๋๋ค.
ํนํ Rust์ ๊ฒฝ์ฐ ๋ช ๊ฐ์ง ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก ์ค๋ ์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค.
mingw-w64 CRT์ ์์ฃผ ์์ ๋ถ๋ถ์งํฉ์ .o ๊ฐ์ฒด ํ์ผ๋ก ์ปดํ์ผํด์ผ ํฉ๋๋ค. ์ฆ, ์ผ๋ถ ์ค๋ ๋ ๋ก์ปฌ ์ ์ฅ์ ์ด๊ธฐํ. chkstk๋ ํ์ํฉ๋๋ค.
lld๋ MinGW์ ์ผ๋ฐ์ ์ธ ๊ฐ์ ธ์ค๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ข์ํ์ง ์์ต๋๋ค. ๋์ lld-link ๋๋ llvm-dlltool์ ์ฌ์ฉํ์ฌ .def ํ์ผ์ .lib ํ์ผ๋ก ๋น๋ํด์ผ ํฉ๋๋ค.
IMPORT_NAME_NOPREFIX๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ฒ๋ฆฌํ๋๋ก lld๋ฅผ ์์ ํฉ๋๋ค.
IMPORT_NAME_UNDECORATE, 2๋จ๊ณ๋ฅผ ์ฌ์ฉํด๋ .libs๊ฐ ์๋ฒฝํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค.
Rust์ seh.rs๋ฅผ ์์ ํ์ฌ TYPE_INFO_VTABLE์ ptr::null()๋ก ๋ฐ๊พธ์ธ์. ??_7type_info@@6B@
๊ธฐํธ๊ฐ MinGW์ ์ ์๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ํ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ Rust๋ฅผ ๋น๋ํ๊ณ ์ค์นํฉ๋๋ค.
.cargo/config๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ๋ํผ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง์ปค๋ก ์ง์ ํฉ๋๋ค.
๋ํผ ๋ง์ปค ์คํฌ๋ฆฝํธ๋ ๋๋ถ๋ถ ์ ๋ฌ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ lld-link๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ช ๊ฐ์ง ์กฐ์ ์ ํด์ผ ํฉ๋๋ค.
a) ํ์ผ ์ด๋ฆ ๋์๋ฌธ์ ์์ (์: AdvAPI32.Lib์ advapi32.lib๋ก ๋ณ๊ฒฝ)
b) Rust๊ฐ ์์ฑํ๋ .def ํ์ผ์ ์์ ํ์ฌ ๊ธฐํธ์ ์ถ๊ฐ ๋ฐ์ค์ ๋ถ์ ๋๋ค.
c) ์ง์ ์ (/entry)์ ์ฌ์ ์ํฉ๋๋ค. ์ด๋ฆ ๋งน๊ธ๋ง ๋ฌธ์ ๋ก ์ธํด ํ์ํฉ๋๋ค.
d) 1๋จ๊ณ์์ ์ปดํ์ผํ mingw-crt ๊ฐ์ฒด ํ์ผ์ ์ถ๊ฐํฉ๋๋ค.
xargo --target=i686-pc-windows-msvc๋ฅผ ์ฌ์ฉํ์ฌ Rust ํ๋ก์ ํธ๋ฅผ ๋น๋ํฉ๋๋ค.
์์ ๋จ๊ณ๋ฅผ ์ํํ๋ฉด Rust ์ฝ๋๋ฅผ ๊ต์ฐจ ์ปดํ์ผํ ์ ์์ต๋๋ค. Rust์ SEH ๊ธฐ๋ฐ ํด์ ๋ฅผ ์ฌ์ฉํ์ฌ ํจ๋์ ๋น ์ง๊ณ ํจ๋์ ์ก์ ์๋ ์์ต๋๋ค.
@iainnicol msvc ๋์์ MinGW ๋นํธ์ ํผํฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ด์ํ ์์ ์ ์ํํด์ผ ํฉ๋๋ค. ๊ธฐ์กด VC++ ์ค์น์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณต์ฌํ๊ธฐ๋ง ํ๋ฉด ๋ชจ๋ ์์ ์ด๋ MinGW ๋นํธ ์์ด lld-link๋ฅผ ์ ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ง๋ง ๊ธฐ์กด VC++ ์ค์น๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง ์์ต๋๋ค. ์ ํฌ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์ค์นํ๋ ๋ฐ 8์๊ฐ์ ์๋นํ๊ณ ์ฌ๋ฐฐํฌํ๋ ๋ฐ ํจ์ฌ ๋ ์ ์ ์๊ฐ์ ์๋นํ์ง ์๊ณ ํ๋๋ฅผ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค.
๋ ๋ฆฝ ์คํํ ๋น๋ ๋๊ตฌ๋ ์ด๋ฏธ ์ธ๊ธํ ๊ฒ์ด ์๋๋ผ๋ฉด ํจ์ฌ ๋ ๊ฐ๋ณ์ต๋๋ค. ์ด ๊ฒฝ์ฐ MinGW๊ฐ ์ค์ ๋ก MSVC์ ํธํ๋๋๋ก ๊ฐ์ ํ๊ฑฐ๋ ๋ค์ ๋ง๋๋ ์์ ์ ํด์ผ ํฉ๋๋ค.
๋ ๋ฆฝ ์คํํ ๋น๋ ๋๊ตฌ๋ ํจ์ฌ ๋ ๊ฐ๋ณ์ต๋๋ค.
๋๋ ๋ง์ดํฌ๋ก์ํํธ๊ฐ ๊ทธ๊ฒ๋ค์ ๋ฐฐํฌํ๋ค๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ๋ค. ๊ทธ๋ค๊ณผ ์ฐ๊ฒฐํด ์ฃผ์๊ฒ ์ต๋๊น? ์ค์ ๋ก ์คํํ์ง ์๊ณ ์ค์น ์์นด์ด๋ธ๋ฅผ ์ถ์ถํ๋ ํฉ๋ฆฌ์ ์ธ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์ฆ, msi ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ๋๊น?
์ฌ๊ธฐ์ ์์ต๋๋ค: http://landinghub.visualstudio.com/visual-cpp-build-tools
2015 ๋ฐ 2017 ๋ฒ์ ๋ชจ๋ exe์ด์ง๋ง ๋ค์์ ํตํด 2017 exe๊ฐ ์ํ๋ ๊ฒ์ ์ ๊ณตํ๋๋ก ์ค๋ํ ์ ์์ต๋๋ค. https://docs.microsoft.com/en-us/visualstudio/install/install-vs- ์ผ๊ด์ฑ ์๋ ํ์ง ๋คํธ์ํฌ
Windows์์ ์ด ์์ ์ ์ ๋๋ก ์ํํ๋ ค๋ฉด ๋จผ์ Windows SDK ๋๋ MinGW์ ๊ฐ์ ธ์ค๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ์ง ์๋๋ก https://github.com/rust-lang/rust/issues/30027 ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ์๊ฒ ๋จ์ ๊ฒ์ CRT ๋นํธ๋ฅผ ์ฐ๋ฆฌ์ ์์ํ Rust ๋ฒ์ (์ํ/๊ธฐ์ต ํจ์, ์ง์ ์ , Rust๊ฐ ํ์๋ก ํ๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ ๋ฐํ์ ๋นํธ)์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ๋ฟ์ ๋๋ค. Windows ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ง๋์ญ์์ค! ์ด๊ฒ์ ๋จ์ ์ C/C++ ์ฝ๋๋ฅผ ์ ์ ์ผ๋ก ๋งํฌํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด ์ด๊ฒ์ด MinGW ๋๋ VC++์์ ์ ์ ํ CRT์ ๋งํฌํ๋ ๋ฐ ๋งค์ฐ ํฌ๊ฒ ์์กดํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฌผ๋ก Rust์ ์์ ์ Rust์์ ๋ชจ๋ ๊ฒ์ ๋ค์ ์์ฑํ๋ ๊ฒ์ด๋ฏ๋ก ์ด๊ฒ์ ๊ทธ๋ค์ง ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
Linux์์ Windows๋ก์ ๊ต์ฐจ ๋งํฌ๋ผ๋ ๋ชจํธํ ์ฃผ์ ์ ๊ด์ฌ์ด ์๋ ๋ชจ๋ ์ฌ๋์๊ฒ ํฌ์์์ ๋๋ค. ์ด์ ์ lld๋ก๋ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ๋งํ์ง๋ง ์ด๋ lld์ ld ํ๋ฏธ์๋ง ํด๋น๋ฉ๋๋ค. lld์ link.exe ๋ง(lld-link)์ด ๊ฐ๋ฅํฉ๋๋ค.
์ด์ ld ๋ง์ผ๋ก๋ ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋ค. https://reviews.llvm.org/rL312926
์๋ก์ด lld์ MinGW ํธํ ๋๋ผ์ด๋ฒ๋ lld-link ๋ง์ปค์ ๋ํ ๋ํผ์ ๋๋ค. ๋ด๋ถ์ ์ผ๋ก Unix-ish ์ต์ ์ Windows-ish ์ต์ ์ผ๋ก ๋ณํํ ๋ค์ lld-link์ ์ง์ ์ ์ ํธ์ถํฉ๋๋ค. ๋น์ ์ด ๊ทธ๊ฒ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋์ง ํ์ ํ ์ ์์ต๋๋ค. (๋ํผ ๋๋ผ์ด๋ฒ๊ฐ ๋ถ์์ ํ๊ณ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์ง ์์ ๊ฒ์ ์ ์ธํ๊ณ ) MinGW์ฉ Makefile์ด ์ด๋ฏธ ์์ง ์๋ ํ ์์ ์ ๋ ์ฝ๊ฒ ๋ง๋ค์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํฌ๋ก์ค ์ปดํ์ผ์ ๋ํด (์๋ง๋ ์ด๋ฆฌ์์) ์ง๋ฌธ์ด ์์ต๋๋ค. Windows์์ dllimport๋ ๋ชจ๋ ๊ธฐํธ์๋ ๊ฐ์ ธ์ค๊ธฐ์ DLL ์ด๋ฆ์ด ์์ต๋๋ค. MSVC ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ dllimport'ed ๊ธฐํธ๋ฅผ ๊ฐ์ ธ์ค๋ ํ์ผ์ ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น?
ํฌ๋ก์ค ์ปดํ์ผ์ ๋ํด (์๋ง๋ ์ด๋ฆฌ์์) ์ง๋ฌธ์ด ์์ต๋๋ค. Windows์์ dllimport๋ ๋ชจ๋ ๊ธฐํธ์๋ ๊ฐ์ ธ์ค๊ธฐ์ DLL ์ด๋ฆ์ด ์์ต๋๋ค. MSVC ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ dllimport'ed ๊ธฐํธ๋ฅผ ๊ฐ์ ธ์ค๋ ํ์ผ์ ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น?
๊ฐ์ ธ์ค๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ์ ธ์ค๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ฑฐ๋ https://github.com/rust-lang/rust/issues/30027์ ๊ตฌํํ์ฌ winapi
๊ฐ ๋ชจ๋ ์ด๋ ค์ด ์์
์ ์ํํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. ๊ฐ ๊ธฐํธ๊ฐ ์์์ ๊ฐ์ ์๋ฑํจ๊ณผ ํจ๊ป ์ด๋ค DLL์์ ์๋์ง ์ง์ ํ๋ ์์
. ๋ญ๊ฐ๋ ์ฝ๋์์ ๊ฐ์ ธ ์ค๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ ์ฃผ์์ด๋ , DLL์ ์ฌ๋ณผ / ์์์ ๋งํฌ์์ ์ฌ๋ณผ ๋งคํ์ ์ง์ ํ ์ ์์ต๋๋ค.
https://reviews.llvm.org/rL311734 ๋ฅผ ๊ฐ์ ธ์จ ํ macOS์์ lld๋ฅผ ์ฌ์ฉํ์ฌ rustc๋ฅผ ๋ถํธ์คํธ๋ฉํ ์ ์์ต๋๋ค. ์์ง ์กฐ์ฌํด์ผ ํ๋ dylib ๋ฉํ๋ฐ์ดํฐ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
https://github.com/rust-lang/rust/pull/36120 ์ ๋ถํ์ํค๋ ๋ถ๊ธฐ๊ฐ https://github.com/rust-lang/rust/issues/43370์์ ์ฐจ๋จ๋ฉ๋๋ค
@tamird : #43370์ด ํ์๋์์ต๋๋ค.
LLD๊ฐ https://github.com/rust-lang/rust/pull/48125 ์ ์ถ๊ฐ๋์์ผ๋ฉฐ ํ์ฌ Tier 1 ํ๋ซํผ(mac, linux, windows)๊ณผ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ถ๋ถ์ ํ๋ซํผ์์ ์๋ํ์ง ์์ ์ ์์ง๋ง ๊ฐ ํ๋ซํผ์ ๋ํด -Z linker-flavor
๋ก ํ
์คํธํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ MSVC์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
$ RUSTFLAGS='-Z linker-flavor=lld-link' cargo build
Cargo์ ์์ฒด ๋งํฌ ์๊ฐ์ 2.5์ด์์ 1.5์ด๋ก ์ค์์ต๋๋ค.
@alexcrichton , ๋ค์ ๋จ๊ณ๋ ๋ฌด์์ ๋๊น? ์ด์์ ์ผ๋ก๋ ๋ชจ๋ ํ๋ซํผ์์ ๊ธฐ๋ณธ์ ์ผ๋ก LLD๊ฐ ์๋ํ๋๋ก ํ๊ณ (์ผ๋ง๋ ๋ง์ ์์ ์ด ์์๋ ์ง์ ๋ํ ๊ฐ๋ ์ด ์์), ์ปดํ์ผ ์๊ฐ/๋ฐํ์ ๋ฒค์น๋งํฌ๋ฅผ ์คํํ์ฌ LLD๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ธ์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค. ๋ชจ๋ ํ๋ซํผ. ํนํ ์ฆ๋ถ ์ปดํ์ผ์์๋ ์ฐ๊ฒฐ ์ฑ๋ฅ์ด ๊ทธ ์ด๋ ๋๋ณด๋ค ์ค์ํด์ง ๊ฒ์ ๋๋ค.
ํนํ ์ฆ๋ถ ์ปดํ์ผ์์๋ ์ฐ๊ฒฐ ์ฑ๋ฅ์ด ๊ทธ ์ด๋ ๋๋ณด๋ค ์ค์ํด์ง ๊ฒ์ ๋๋ค.
์ฐ๊ฒฐ ์ฑ๋ฅ์ด ์ฌ์ ํ ์ง์ํ๋ ํ๋ซํผ์์ ์ฆ๋ถ ์ฐ๊ฒฐ์ ํ์ฑํํ๋ ๊ฒ๊ณผ ๊ฐ์ ์์ ์ ์ํํ๊ธฐ์ ์ถฉ๋ถํ ์ค์ํ์ง ์๋ค๋ ๊ฒ์ ์ ๊ฐ์ ๋๋ค. https://github.com/rust-lang/rust/issues/37543
@bstrie ์ ๋ ์ด๊ฒ์ด ๋ค๋ฅธ ํ๋ซํผ์์ ์๋ํ๋๋ก ํ๋ ๋ค์ ๋จ๊ณ๋ผ๊ณ ์๊ฐํฉ๋๋ค. :)
๊ทธ๊ฒ์ด ์๋ฐํ๋ ๊ฒ์ ๊ดํด์๋ ํ์คํ์ง ์์ง๋ง ์ด๋ฏธ MSVC์์ ์๋ํฉ๋๋ค. MinGW/Linux์์ ์๋ํ๋ ๊ฒ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๊ณ OSX์์๋ ๋งค์ฐ ๊ฐ๊น์ต๋๋ค. ๊ต์ฐจ ์ํคํ ์ฒ ์ง์์ ๊ดํด์๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ฐ๊น์ด ์ฅ๋์ wasm ํ๋ซํผ ์ด์ธ์ ๋ค๋ฅธ ๊ฒ์ ๋ํด "์์ ํ"ํ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ์ง ์์ต๋๋ค.
@alexcrichton "์์ ํ"๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ญค๋ด๋ ๋ ๊น์? ์ ๋ค๋ฅธ ์ฃผ์ ํ๋ซํผ ๋ น ์ง์์ ๋ํด lld์์ ์ฐ๊ฒฐ์ "์์ ํ"ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๊น? (์: macOS์ฉ Linux์์ ์คํ ํ์ผ์ ๊ต์ฐจ ์ปดํ์ผ).
์๋ฅผ ๋ค์ด Linux์์ macOS(x86_64-apple-darwin)์ฉ ์คํ ํ์ผ์ ๊ต์ฐจ ์ปดํ์ผํ๋ ๋ฐ ํ์ํ ์์ ์ xcode sdk๋ฅผ ํ๋ํ๊ณ ์ ์ฒด ๋๊ตฌ ์ฒด์ธ์ ๊ตฌ์ถํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ๋จํ ๋จ๊ณ๊ฐ ํ์ํฉ๋๋ค.
@cynecx ์ข์ ์ง๋ฌธ์ ๋๋ค! ๋ณ๋ก ์๊ฐํ์ง ์์ ๊ฒ ์ค ํ๋. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ํ๋ซํผ์ LLD๋ฅผ ์ถ๊ฐํ๋ค๋ ์ด์ ๋ง์ผ๋ก LLD๋ฅผ ์ฌ์ค์ ์์ ํํ๊ณ ์ถ์ง๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. LLD๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ํ๊ณ ์ ๋๋ก ๋ ธ์ถํ๋ ค๋ฉด ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์ํ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด Linux์์ macOS(x86_64-apple-darwin)์ฉ ์คํ ํ์ผ์ ๊ต์ฐจ ์ปดํ์ผํ๋ ๋ฐ ํ์ํ ์์ ์๋ xcode sdk๋ฅผ ํ๋ํ๊ณ ์ ์ฒด ๋๊ตฌ ์ฒด์ธ์ ๊ตฌ์ถํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ๋จํ ๋จ๊ณ๊ฐ ํ์ํฉ๋๋ค.
LLD๋ ์ฌ๊ธฐ์์ ์ค์ ๋ก ๋์์ด ๋์ง ์์ต๋๋ค. ์ฌ๋ฐฐํฌํ ์ ์๋ ํค๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ Xcode SDK๊ฐ ํ์ํฉ๋๋ค(๊ทธ๋ฆฌ๊ณ ๋น๋ํ๋ ํญ๋ชฉ์ ๋ฐ๋ผ ๋ค๋ฅธ SDK ๋๊ตฌ๋ ํ์ํฉ๋๋ค).
์ด์ ์ผ๊ฐ์ ๋ด์ฅ๋ LLD์ ์ ๋ง ์ข์ ์ ์ RUSTFLAGS='-Z linker-flavor=ld.lld' cargo build --target x86_64-unknown-linux-musl
๋ฅผ ์ฌ์ฉํ์ฌ ์์ํ Rust ํ๋ก์ ํธ๋ฅผ Windows์์ Linux๋ก ์ฝ๊ฒ ๊ต์ฐจ ์ปดํ์ผํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ๋จ์ํ Rust๋ฅผ ์ค์นํ ์ ์๋ Linux ๋จธ์ ์ ์ํ ์์ ๋๊ตฌ๋ฅผ ์์ฑํ๋ ๋ฐ ์ข์ต๋๋ค.
๊ฐ๊น์ด ์ฅ๋์ wasm ํ๋ซํผ ์ด์ธ์ ๋ค๋ฅธ ๊ฒ์ ๋ํด "์์ ํ"ํ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ์ง ์์ต๋๋ค.
@rkarp๊ฐ ๋งํ๋ฏ์ด ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ ์ปจํ ์ด๋ํ๋ Linux ์ํฌ๋ก๋๋ฅผ ์ง์ํ๊ธฐ ์ํด x86_64-unknown-linux-musl(๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ตญ์๋ ๊ตฐ๋ง)์ ๋์์ผ๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ด ์ด๋์ ์ ๋ง ์ํ๋ค๋ ๊ฒ์ ๊ฒ๋ค ์ค ํ๋์ด๋ฉฐ ์ฐ๋ฆฌ๋ ๋งค์ฐ ๊ฐ๊น์ด ๋ น ๋ง์ฐฌ๊ฐ์ง๋ก ์ํ ํ ์์์ ๊ฒ ๊ฐ๋ค ๊ณณ. ์ค์ ์ฌ์ฉ ์ธก๋ฉด์์ x86_64-unknown-linux-musl์ ๋ํ LLD๊ฐ ์ค์ ๋ก wasm๋ณด๋ค ํจ์ฌ ๋ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋ ๊ฒ์ ๋๋ค.
๋ ์ผ๋ฐ์ ์ผ๋ก, ๊ต์ฐจ ๊ตฌ์ถ์ ๊ดํด์๋ "๋ชจ๋ ํธ์คํธ ๋ฐ/๋๋ ๋ชจ๋ ๋์์์ ์๋ํด์ผ ํจ" ์ ๊ทผ ๋ฐฉ์์ด ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชฉํ๊ฐ ์๋ํ๊ธฐ ์์ํ ๋ ๋ชฉํ๋ณ๋ก ์ด๋ฅผ ์์ ํํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํนํ x86_64-unknown-linux-musl ํ๊ฒ์ ๋ํ LLD๋ฅผ ์ต๋ํ ๋นจ๋ฆฌ ์์ ํํ๋ ค๋ ๋ ธ๋ ฅ์ ๋์์ ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
๋ด ํ๋ก์ ํธ์๋ 37๊ฐ์ ์์๊ฐ ์๊ณ ๋น๋ ๋งํฌ๋ ์ฝ 70๊ฐ์ ๋ฐ์ด๋๋ฆฌ(๋ง์ ํ
์คํธ)์
๋๋ค. ๋น๊ณผํ์ ์ผ๋ก ( top
) ๋น๋ ์๊ฐ์ ์ ์ด๋ ์ ๋ฐ์ ld ๋ง ์คํํ๊ณ ์์ต๋๋ค. lld๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋ ์๋๊ฐ ๋ง์ด ๋นจ๋ผ์ง ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์์ ์ ์ธ Rust๋ฅผ ์ฌ์ฉ ์ค์ด๊ณ ์์ง lld 6.0์ ์๋์ํค์ง ๋ชปํ์ต๋๋ค.
@briansmith musl๊ณผ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด LLD๋ฅผ ํ
์คํธํด ๋ณด์
จ์ต๋๊น? ์ด๋ก ์์ผ๋ก ํ
์คํธํ๊ธฐ ์ํด ํด์ผ ํ ์ผ์ -Z linker-flavor=ld.lld
๋ฅผ ์ ๋ฌํ๋ ๊ฒ๋ฟ์ด๋ฉฐ, ์ด๊ฒ์ด ๊ทธ๋ด๋ฏํด ๋ณด์ธ๋ค๋ฉด ๊ธฐ๋ณธ๊ฐ์ ์ ํํ ์ ์์ต๋๋ค!
@rocallahan ํ์ธ์ ์ํด ํ์ฌ ๊ณจ๋ ๋ง์ปค๋ฅผ ์ฌ์ฉํ๊ณ -Z linker-flavor=ld.lld
์๋ํ๊ณ ๋ ๋น ๋ฅด๋ค๋ฉด ์์ ํ๋ฅผ ๋ชจ์ํ ์ ์์ต๋๋ค! ์ด๋ค ํ๋ซํผ์ ์์๋์?
๋น๊ณผํ์ ์ผ๋ก(๋๋ถ์ ์ ์) ๋น๋ ์๊ฐ์ ์ต์ ์ ๋ฐ์ ld๋ฅผ ์คํํ๊ณ ์์ต๋๋ค.
๋๋ฒ๊ทธ ๋น๋ BTW์ฉ์ ๋๋ค.
์ฌ๋ฌ๋ถ์ ํ์ฌ ๊ณจ๋ ๋ง์ปค๋ฅผ ์ฌ์ฉํ๊ณ ๊ณ์์ฃ ? (afaik์ผ๋ก์ ํ์ค binutils ๋ง์ปค๋ณด๋ค ๋น ๋ฆ)
์๋์, ํ์ค GNU ๋ง์ปค์ธ Fedora ์์คํ ๋ง์ปค์ ๋๋ค.
์ด๋ค ํ๋ซํผ์ ์์๋์?
Fedora 27, SSD๊ฐ ํ์ฌ๋ ์ฟผ๋ ์ฝ์ด Skylake ๋ ธํธ๋ถ. ๋ช ๊ฐ์ง ์ฑ๋ฅ ์์น๋ฅผ ์ป์ ๊ฒ์ ๋๋ค.
์ ๊ทธ๋ ๊ตฐ์ ์์๋์๋ฉด ์ข์ต๋๋ค! ๋๋ฒ๊ทธ ๋น๋๋ ๋ง์ปค ๊ฐ์ ๋ณด๋ค๋ ๋ถํ ๋์ํ(https://github.com/rust-lang/rust/issues/34651)์ ๋งํฌ ์๊ฐ์์ ๊ฐ์ฅ ๋ง์ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํ์ด๋ฐ ์ ๋ณด์ ๊ฒฝ์ฐ ld.gold
๋ฐ ld.lld
๋ง์ธ๋ ํ
์คํธ๋ฅผ ํ ๊ธฐํ๊ฐ ์๋ค๋ฉด @rocallahan ?
ํ์ ํ๋. ๋ํ ๋ฌธ์ #48762๋ Linux ๋๋ฒ๊ทธ ๋งํฌ ์๊ฐ์ ๋จ์ถํ๊ธฐ ์ํ ๋งค์ฐ ๋ฎ์ ๊ฒฐ๊ณผ์์ ์๊ธฐ์์ผ์ผ ํฉ๋๋ค. (์ฐ๋ฆฌ๋ ์ด๋ฏธ ์คํ ํ์ผ์์ .debug_pubnames
/ .debug_pubtypes
์ ์ญ์ ํ๋ ํดํน๋ ๋ง์ปค ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.)
๋ถํ DWARF๋ ์ข์ ์ ์์ง๋ง ์ฌ์ฉ์์๊ฒ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์๋ ์์ต๋๋ค. ๋๋ ๊ทธ ๋ฌธ์ ์ ๋ํด ๋ ผํํ ๊ฒ์ด๋ค.
@briansmith musl๊ณผ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด LLD๋ฅผ ํ ์คํธํด ๋ณด์ จ์ต๋๊น? ์ด๋ก ์ ์ผ๋ก ํ ์คํธํ๊ธฐ ์ํด ์ํํด์ผ ํ๋ ๋ชจ๋ ์์ ์ -Z linker-flavor=ld.lld๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ๋๋ค. ์ด ์์ ์ด ๊ทธ๋ด๋ฏํด ๋ณด์ธ๋ค๋ฉด ๊ธฐ๋ณธ๊ฐ์ ์ ํํ ์ ์์ต๋๋ค!
์๊ฒ ์ต๋๋ค. ํ
์คํธํด ๋ณด๊ฒ ์ต๋๋ค. ์๋ง๋ ์ฒ์์๋ "default"์ "only on nightly" ์ฌ์ด์ ์ค๊ฐ ์ง์ ์ด ์์ด์ผ ํฉ๋๋ค. -Z
์์ ํ ์ ์๋ ๊ฒ์ฒ๋ผ LLD๋ฅผ ์ฌ์ฉํ๋๋ก ์ ํํ๋ ์ด๋ค ๋ฐฉ๋ฒ์ด์ง๋ง ์๋ํ๋ ค๋ฉด -Z
๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์์ ์ ์ธ ๋น๋์์.
๊ทธ๋ฌ๋ ์์ ์ ์ธ ๋น๋์์ ์๋ํ๋๋ก -Z๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
RUSTC_BOOTSTRAP=1 RUSTFLAGS="-Z linker-flavor=foo" cargo build
์๋ํ ์ ์์ต๋๋ค.
๋ถํธ์คํธ๋ฉ ํ๋๊ทธ๋ฅผ ์ถ์ฒํ์ง ์์ผ์๊ฒ ์ต๋๊น? ์ถฉ๋ถํ ํ๋ก์ ํธ๊ฐ ์ฌ๋ฌผ์ ์์กดํ๋ค๋ฉด ์ ์ฒด ์์ ์ฑ ๋ฉ์ปค๋์ฆ์ ์์ ์ ๋ฌด๋๋จ๋ฆฌ๋ฉด์ ์ฌ์ค์ ์์ ์ ์ด ๋ ๊ฒ์ด๋ผ๊ณ ๊ฑฑ์ ํฉ๋๋ค.
์ฃ์กํฉ๋๋ค =/
๋ฐ์ดํฐ ํฌ์ธํธ๋ก, Rust ์ ์ฅ์ ์์ฒด์์ rustc_trans
ํฌ๋ ์ดํธ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋ก์ปฌ ์ปดํจํฐ์์ 78์ด ๋งํฌ ์๊ฐ์์ 1์ด ๋งํฌ ์๊ฐ์ผ๋ก ๊ธ๋ฝํ์ต๋๋ค.
๋ด ์ฑ๋ฅ์ ํฌ๋ ์ดํธ ๊ณ์ธต ๊ตฌ์กฐ์ ๋งจ ์๋ ๊ทผ์ฒ์ ์๋ ํฌ๋ ์ดํธ๋ก ๊ณต๋ฐฑ์ ๋ณ๊ฒฝํ ๊ฒฐ๊ณผ์
๋๋ค. ์ฟผ๋ ์ฝ์ด Skylake ๋
ธํธ๋ถ, 16GB RAM, rustc 1.24.0, LLD 7.0.0, GNU ld 2.29-13. .debug_pubnames
๋ฐ .debug_pubtypes
๋ฅผ ๋ฒ๋ฆฌ๋ ์ฌ์ฉ์ ์ง์ ๋ง์ปค ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. LLD๋ ๋ง์ปค ์คํฌ๋ฆฝํธ๊ฐ ์์ ๋ ๋งค์ฐ ๋ค๋ฅธ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
GNU ID:
real 2m39.138s
user 8m18.992s
sys 1m37.513s
LLD:
real 2m19.164s
user 6m4.477s
sys 0m56.858s
Gold๋ ์๋ํ์ง ์์๊ณ ๋ง์ปค ์คํฌ๋ฆฝํธ์ ๋ฐฉํด๊ฐ ๋์์ต๋๋ค. ๊ฒฐ๊ณผ๋ ์๋นํ ์์ ์ ์ ๋๋ค. LLD๋ ์ข ๋จ ๊ฐ ์๊ฐ์ ๊ทธ๋ค์ง ์ํฅ์ ๋ฏธ์น์ง ์์ง๋ง CPU ์ฌ์ฉ๋์ ํฌ๊ฒ ์ค์ ๋๋ค. ๊ทธ๊ฒ์ ์ฐ๋ฆฌ์ ๋น๋๊ฐ lds๊ฐ ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐ ๋ง์ ์๊ฐ์ ์๋นํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ๋ค์ ์คํํ๋ ๋ฐ ๋ง์ CPU ์๊ฐ์ ์๋นํฉ๋๋ค.
GNU ld์์ lld๋ก ์ ํํ๋ฉด ์ผ๋ฐ์ ์ธ "์ฌ์ํ ๋ณ๊ฒฝ ๋ฐ ์ฌ๊ตฌ์ถ" ์์ ๋ถํ๊ฐ 2.5๋ฐฐ ์ด์ ๋น ๋ฅด๊ฒ ์คํ๋๋ ์ค์ ์๋ #50584๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Er https://github.com/rust-lang/rust/issues/50584#issuecomment -400918647์ด ๋ ์ ์ ํฉ๋๋ค.
LLD๋ฅผ ์์ ํํ๊ธฐ ์ํ ๋ค์ ๋จ๊ณ๋ ๋ชจ๋ ๋์(Windows + Mac + Linux)์์ ์๋ํ๋ -Z linker-flavor=lld์ ๊ฐ์ ํ๋๊ทธ๋ฅผ ์ป๋ ๊ฒ์ ๋๋ค. ๋ค์ํ ํ๋ซํผ์์ ์๋ํ๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ์์ ์ ์ํํฉ๋๋ค.
์๋ฃ๋๋ฉด ์ปค๋ฎค๋ํฐ์ ๊ด๊ณ ํ์ฌ ํผ๋๋ฐฑ์ ์์ฒญํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ํ์ด๋ฐ ์ ๋ณด์ LLD์ ๋ณด๋ผ ๋ฒ๊ทธ ๋ณด๊ณ ์๋ฅผ ๋ชจ๋ ์ป์ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์์กฐ๋กญ๊ฒ ์งํ๋๋ค๋ฉด(์์ ํ ์๋ก์ด ๋ง์ปค์์๋ ์์ฌ์ค๋ฝ๊ธด ํ์ง๋ง, ์ฌ๋ฌ๋ถ์ ์ ๋ ๋ชจ๋ฆ ๋๋ค!) ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ์ผค ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด LLD ์ ํ์ ์์ ํํ ๋ค์ Cargo์ ์ต์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ์์ ์ต์ํ ์ตํธ์ธํ ์ ์๋๋ก toml.
์ผ๋ถ ๋์์ ๋ํด lld๋ก ์ ํํ์ต๋๋ค. https://rust-embedded.github.io/blog/2018-08-2x-psa-cortex-m-breakage/
๋๋ wass๋ฅผ ์ํด ๋ํ ๋ฏฟ์ต๋๊น?
์ด ๋ฌธ์ ๋ ์ธ๋ถ lld ๋ฐ์ด๋๋ฆฌ์ ์ฐ๊ฒฐํ๊ณ rustc ์์ฒด์ ๋ด์ฅ๋ ๋ด๋ถ lld ์ง์๊ณผ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋ชจ๋ ํฌํจํฉ๋๊น? ์๋๋ฉด ์ ์๋ง?
์ด ๋ฌธ์ ๋ ์ธ๋ถ lld ๋ฐ์ด๋๋ฆฌ์ ์ฐ๊ฒฐํ๊ณ rustc ์์ฒด์ ๋ด์ฅ๋ ๋ด๋ถ lld ์ง์๊ณผ ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋ชจ๋ ํฌํจํฉ๋๊น? ์๋๋ฉด ์ ์๋ง?
์ธ๋ถ lld ๋ฐ์ด๋๋ฆฌ, IIUC.
@nnethercote ๋ด๋ถ ๋ง์ปค ์ฌ์ฉ์ ์ถ์ ํ๋ ๋ฐ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์์ต๋๊น? ์๋๋ฉด ๋ณ๋๋ก ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด์ผ ํ๋์?
๋ด๋ถ ๋ง์ปค ์์ด๋์ด์ ๋ํด ๋ค์ด๋ณธ ์ ์ด ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋ํ PR์ ์์ง ๋ชปํฉ๋๋ค.
https://github.com/rust-lang/rust/pull/57514 LLD๋ฅผ ์ฌ์ฉํ์ฌ LLVM์ ์ฐ๊ฒฐํ ์ ์๋ ๊ธฐ๋ฐ์ ๋ง๋ จํ์ต๋๋ค.
์๋ง๋ ์ฒ์์๋ "๊ธฐ๋ณธ"๊ณผ "์ผ๊ฐ ์ ์ฉ" ์ฌ์ด์ ์ค๊ฐ ์ง์ ์ด ์์ด์ผ ํ๋ฉฐ, -Z์ ๊ฐ์ด LLD๋ฅผ ์ฌ์ฉํ๋๋ก ์ ํํ์ง๋ง ์์ ์ ์ธ ๋น๋์์ ์๋ํ๋๋ก -Z๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
https://github.com/rust-lang/rust/pull/56351 ์ถ๊ฐ -C linker-flavor
.
์ด ๋ฌธ์ ๊ฐ ๋ฌด์์ ์ถ์ ํ๋ ค๋ ๊ฒ์ธ์ง ๋ช ํํ์ง ์์ต๋๋ค. "Microsoft์ ๋๊ตฌ ๋ชจ์์ ์ฌ์ฉํ ์ ์์ ๋ -msvc ๋์์ ๋ํ LLD์ ์ฐ๊ฒฐ"๊ณผ ๊ฐ์ ํน์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์ํด ์ด๊ฒ์ ๋ซ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค.
๋์๊ฒ ์ด ๋ฌธ์ ๋ ๋ชจ๋ ๋์์ ๋ํ ๊ธฐ๋ณธ ๋ง์ปค๋ก LLD๋ฅผ ํ์ฑํํ๋ ๊ฒ์ ๊ดํ ๊ฒ์ ๋๋ค. LLD๋ ๋งค์ฐ ๋น ๋ฅด๊ณ ๋งํฌ ์๊ฐ์ ์ข ์ข ์ปดํ์ผ ์๊ฐ์ ์ค์ํ ๊ตฌ์ฑ ์์์ด๋ฉฐ ์ปดํ์ผ ์๋๋ ์์ํ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ์ ๋ ๊ทธ๊ฒ์ ์ํฉ๋๋ค.
FWIW BMO ์์ macOS ์์ ๋ฒ๊ทธ๋ฅผ ์ ์ถํ์ต๋๋ค. ๋ถ๋ช ํ ๊ทธ๊ฒ์ WONTFIX์ ๋๋ค. ๋ค๋ฅธ ํ๋ซํผ์ LLD๊ฐ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด๊ณ macOS์ LLD๊ฐ ์ง์ฐ๋ ๊ฐ๋ฐ๋ก ์ธํด ์์๋์๊ธฐ ๋๋ฌธ์ ๋๊ธ์์ "LLD๋ ๋งค์ฐ ๋น ๋ฆ"๋งํผ ๊ฐ๋จํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
@briansmith ๋ ๋ค๋ฅธ ๋์์ ๋ํด ์ด ์ํ๋ฅผ ์ถ์ ํ๊ธฐ ์ํ ์ ์ฉ ๋ฌธ์ ๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ข์ง๋ง ์ด๊ฒ์ ๋ซ๋ ๋์ ๋ฉํ๋ฒ๊ทธ๋ก ์ ํํ ์ ์๋ค๋ ์ ์ ๋์ํ์ต๋๋ค. ์ด๋ค ๋์์ด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ ๊ฐ์น๊ฐ ์๋์ง ๋ ๋ง์ด ์๊ณ ์๋ ์ฌ๋์ด ์์ผ๋ฉด ์ธ์ ๋ ์ง LLD ์ง์ ์ํ์ ๋ํ ๋ฃจํ๋ฅผ ๋ฒ์ด๋ฌ๊ธฐ ๋๋ฌธ์ ์์ ๋กญ๊ฒ ๋ง์ํด ์ฃผ์ญ์์ค.
LLD์์ ์ฐ๊ฒฐ์ด ๋ฌธ์ํ๋์ด ์์ต๋๊น? (Linux์์) rustc -C linker-flavor=ld.lld hello.rs
๊ฐ ์์ง๋ง ์ด์ด ์ข์ง ์์ต๋๋ค. ๋๋ LLD๊ฐ ์ฐ๋ฆฌ์ LLVM ์ฌ๋ณธ๊ณผ ํจ๊ป ๋ฐฐํฌ๋์๋ค๊ณ ์๊ฐํ๋๋ฐ, ๋ด๊ฐ ํ๋ ธ์ต๋๊น? ๋๋ ๋ํ apt๋ฅผ ํตํด LLD๋ฅผ ์ค์นํ๋ ค๊ณ ์๋ํ์ง๋ง rustc๋ ์ฌ์ ํ ์์๊ป๋ผ์
๋๋ค. ์ค๋ Rust ์ฝ๋๋ก LLD๋ฅผ ์๋ํ๊ธฐ ์ํด ์ทจํด์ผ ํ ๋จ๊ณ๋ ๋ฌด์์
๋๊น?
@bstrie -C linker=rust-lld
์ธ์๋ฅผ ์ถ๊ฐ๋ก ์ ๋ฌํด์ผ ํฉ๋๋ค.
ํ๋ฌผ๊ณผ ํจ๊ป ์๋ํด์ผํฉ๋๊น? ๋ น๊ณผ ํ๋ฌผ์ ์ต์ ์ผ๊ฐ ๋น๋์์ ๋น ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋ ค๊ณ ํ ๋ ํ์ฌ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
$ RUSTFLAGS='-C linker=rust-lld' cargo build
Compiling rust3 v0.1.0 (/home/carado/tmp/rust3)
error: linking with `rust-lld` failed: exit code: 1
|
= note: "rust-lld" "-flavor" "gnu" "-L" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/home/carado/tmp/rust3/target/debug/deps/rust3-c4f8c40972021c55.2ualxzb8lqn4ho3y.rcgu.o" "/home/carado/tmp/rust3/target/debug/deps/rust3-c4f8c40972021c55.32vfyq64cfbzv618.rcgu.o" "/home/carado/tmp/rust3/target/debug/deps/rust3-c4f8c40972021c55.4rbt3m5y8o8cl09t.rcgu.o" "/home/carado/tmp/rust3/target/debug/deps/rust3-c4f8c40972021c55.ben0932xzwyt64v.rcgu.o" "/home/carado/tmp/rust3/target/debug/deps/rust3-c4f8c40972021c55.fzsdnygvstiwzxo.rcgu.o" "/home/carado/tmp/rust3/target/debug/deps/rust3-c4f8c40972021c55.x0rq6ifodcf11zi.rcgu.o" "-o" "/home/carado/tmp/rust3/target/debug/deps/rust3-c4f8c40972021c55" "/home/carado/tmp/rust3/target/debug/deps/rust3-c4f8c40972021c55.1m259ox4uzrzk583.rcgu.o" "--gc-sections" "-pie" "-zrelro" "-znow" "-L" "/home/carado/tmp/rust3/target/debug/deps" "-L" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "--start-group" "-Bstatic" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-44988553032616b2.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-607feef6be9150b2.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace-a8dbf6d92401e34a.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace_sys-9a4716f5e8a3e722.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-988a64d96b043c6d.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-cadd6177b8c6d586.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-8f1d8efc92b45369.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-1e76014677816767.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-cc28bce38cb195d9.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-4123e9e89add689a.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-4d259c17788c1fb5.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-9495dbda85bb8f16.rlib" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-793d0026c575805f.rlib" "--end-group" "/home/carado/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-33c3162edae6574e.rlib" "-Bdynamic" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-lutil"
= note: rust-lld: error: unable to find library -ldl
rust-lld: error: unable to find library -lrt
rust-lld: error: unable to find library -lpthread
rust-lld: error: unable to find library -lgcc_s
rust-lld: error: unable to find library -lc
rust-lld: error: unable to find library -lm
rust-lld: error: unable to find library -lrt
rust-lld: error: unable to find library -lpthread
rust-lld: error: unable to find library -lutil
rust-lld: error: unable to find library -lutil
error: aborting due to previous error
error: Could not compile `rust3`.
To learn more, run the command again with --verbose.
carado์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. "shoehorn" -L /usr/lib ๋ง์ปค ํธ์ถ๋ก ๊ด๋ฆฌ๋์ง๋ง ๋๋ฝ๋ libs ๋ชฉ๋ก์ด libgcc
๋ก ์์คํ
์ ์ด๋์๋ ์กด์ฌํ์ง ์๋ -lgcc
๋จ์ถ๋ฉ๋๋ค( libgcc_s.a
) ๋๋ ์ด๊ฒ์ด ์ผ๋ถ gnu-ism์ ๊ฒฐ๊ณผ๋ผ๊ณ ์๊ฐํ์ง๋ง ๊ทธ๊ฒ์ ๊ณ ์น ๋ฐฉ๋ฒ์ ์ ์ ์์ต๋๋ค.
@almindor RUSTFLAGS='-C linker=rust-lld -L /usr/lib -L /usr/lib/gcc/x86_64-pc-linux-gnu/9.1.0'
๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ์๋ํ์ญ์์ค. ๊ฒฝ๋ก๋ ๋ฐฐํฌํ ๋ฐ ์ปดํ์ผ๋ฌ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค.
์์ ๋ด ์๊ฒฌ์ด LLD๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์
๋๊น? ๋ชจ๋ ํ๋ก๊ทธ๋จ์ด SIGSEGV
์ถฉ๋ํ๋ฏ๋ก ์๋ํ์ง ์์ต๋๋ค.
Reading symbols from target/debug/hello...
(gdb) show directories
Source directories searched: ~/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/etc:$cdir:$cwd
(gdb) r
Starting program: target/debug/hello
Program received signal SIGSEGV, Segmentation fault.
core::ops::function::FnOnce::call_once{{vtable-shim}} () at /rustc/a7f28678bbf4e16893bb6a718e427504167a9494/src/libcore/ops/function.rs:231
(gdb) l
226 #[stable(feature = "fn_once_output", since = "1.12.0")]
227 type Output;
228
229 /// Performs the call operation.
230 #[unstable(feature = "fn_traits", issue = "29625")]
231 extern "rust-call" fn call_once(self, args: Args) -> Self::Output;
232 }
233
234 mod impls {
235 #[stable(feature = "rust1", since = "1.0.0")]
(gdb) info reg
rax 0x0 0
rbx 0x0 0
rcx 0x0 0
rdx 0x0 0
rsi 0x0 0
rdi 0x0 0
rbp 0x0 0x0
rsp 0x7fffffffddb0 0x7fffffffddb0
r8 0x0 0
r9 0x0 0
r10 0x0 0
r11 0x0 0
r12 0x0 0
r13 0x0 0
r14 0x0 0
r15 0x0 0
rip 0x7ffff7ffc000 0x7ffff7ffc000 <core::ops::function::FnOnce::call_once{{vtable-shim}}>
eflags 0x10202 [ IF RF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
(gdb) disassemble
Dump of assembler code for function core::ops::function::FnOnce::call_once{{vtable-shim}}:
=> 0x00007ffff7ffc000 <+0>: mov (%rdi),%rax
0x00007ffff7ffc003 <+3>: mov (%rax),%rdi
0x00007ffff7ffc006 <+6>: jmpq *0x11d4(%rip) # 0x7ffff7ffd1e0
End of assembler dump.
์ฌ๊ธฐ๊น์ง ์ค๋ ์ฌ๋์๊ฒ GCC 9 ๋๋ Clang์ ์ปดํ์ผ๋ฌ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ง๋ฒ์ ์ฃผ๋ฌธ์ RUSTFLAGS="-C link-arg=-fuse-ld=lld" cargo build
์
๋๋ค. ๋๋ -C linker=clang
๋ GCC ๋ฒ์ ์ ๊ด๊ณ์์ด ์๋ํด์ผ ํ๋ฏ๋ก ์ ํธ๋ ์ ์์ต๋๋ค.
์๊ตฌ์ ์ผ๋ก ๋ง๋ค๋ ค๋ฉด ํน์ ํ๋ก์ ํธ์ ~/.cargo/config
๋๋ .cargo/config
์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
[build]
rustflags = ["-C", "linker=clang"]
# rustflags = ["-C", "link-arg=-fuse-ld=lld"]
@lnicola๋ GCC 9 ๋๋ Clang์ CC๋ก ์ฌ์ฉํ ๋๋ง ์๋ํฉ๋๋ค.
@bstrie ์ด๊ฑฐ ํ์ฌ ์ํฉ์ด ์ด๋ค์ง ์์ธ์? ์์ผ๋ก ๋์๊ฐ๋ ๋ฐ ๋ฐฉํด๊ฐ ๋๋ ์์๋ ๋ฌด์์ ๋๊น?
@mati865 ์ค๋๋ GCC๋ฅผ ๊ฐ์ง ์ฌ๋๋ค์ ์ํ ๋์ฒด ํธ์ถ์ ์๊ณ ๊ณ์ญ๋๊น?
@lnicola ๋ด ๋ชจ๋ ํ๋ซํผ์๋ Clang + GCC 9๊ฐ ์์ผ๋ฉฐ ํธํ๋์ง ์๋ ์ปดํ์ผ๋ฌ์ ํจ๊ป ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์กฐ์ฌํ์ง ์์์ต๋๋ค.
@jonhoo ๋๋ ์ด ๋ถ์ผ์ ์ด๋ค ์ผ์๋ ๋ค์ง์ง ์์ต๋๋ค. ๋น์ ์ด ์ปดํ์ผ๋ฌ ํ์ ๋ฌผ์ด๋ณด๊ณ ์ถ์ ๊ฒ์ ๋๋ค.
๋๋ ํ์ ํ๊ทธ๋ฅผ ๋ถ์ผ ์ ์๋ค๊ณ ์๊ฐํ๊ณ ๊ทธ๋ค์๊ฒ๋ ๊ณผ๋ํ ์์์ ์ผ์ผํค๊ณ ์ถ์ง ์์ต๋๋ค. ๊ฑฐ๊ธฐ์์ ๋๊ตฐ๊ฐ๊ฐ ๋น ๋ฅด๊ฒ ์ดํด๋ณด๋๋ก ํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์ด๋ผ๊ณ ์๊ฐํฉ๋๊น?
๋ถ๋ฅ; @rust-lang/compiler ์ด ๋ฌธ์ ์ ํ์ฌ ์ํ๋ฅผ ์๋ ์ฌ๋์ด ์์ต๋๊น?
LLD๊ฐ Rust์ ํจ๊ป ์๋ํ๋๋ก ๊ด๋ฆฌํ๋ ๋ชจ๋ ์ฌ๋์ ์ํด ํ๋ซํผ ๋ฐ ์ฌ์ฉ ์ค์ธ ๋ชจ๋ ์ปดํ์ผ๋ฌ์ ํน์ ๋ฒ์ ์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ถ๊ฐ๋ก ํฌํจํ ์ ์์ต๋๊น? ์ฌ๊ธฐ์ ๋์ด๋ ์กฐ์ธ์๋ ๋ถ๊ตฌํ๊ณ ์๋ํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช๋ ์ฌ๋๋ค์ ์ฌ์ ํ ๋ณด๊ณ ์์ต๋๋ค.
์์ ๊ฒ์ํ ๋ช ๋ น์ GCC 9.2.0 ๋ฐ LLD 9.0.0์ด ์ค์น๋ Linux์์ ์๋ํฉ๋๋ค. ๋๋๋ก Windows์์๋ ์๋ํ๋ค๊ณ ์๊ฐํ์ง๋ง -fuse=lld๋ฅผ ์ง์ํ์ง ์๋ Windows์ฉ GCC 9๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ ๋ณธ ์ ์ด ์์ต๋๋ค. ์ฌ๊ธฐ์ ๊ฒ์๋ ์ผ๋ถ ๋งํฌ์ ๋ฐ๋ฅด๋ฉด MacOS์์๋ ์๋ํด ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค.
LLD๊ฐ Rust์ ํจ๊ป ์๋ํ๋๋ก ๊ด๋ฆฌํ๋ ๋ชจ๋ ์ฌ๋์ ์ํด ํ๋ซํผ ๋ฐ ์ฌ์ฉ ์ค์ธ ๋ชจ๋ ์ปดํ์ผ๋ฌ์ ํน์ ๋ฒ์ ์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ถ๊ฐ๋ก ํฌํจํ ์ ์์ต๋๊น? ์ฌ๊ธฐ์ ๋์ด๋ ์กฐ์ธ์๋ ๋ถ๊ตฌํ๊ณ ์๋ํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช๋ ์ฌ๋๋ค์ ์ฌ์ ํ ๋ณด๊ณ ์์ต๋๋ค.
๊ณ ์์ด /etc/system-release
Fedora ๋ฆด๋ฆฌ์ค 30(์๋ฅธ)
์ฐธ์กฐ --๋ฒ์
CC(GCC) 9.2.1 20190827(๋ ๋ํ 9.2.1-1)
ld.lld --๋ฒ์
LLD 8.0.0(GNU ๋ง์ปค์ ํธํ)
์ด๊ฒ์ด ๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
ํ์ง๋ง -fuse=lld๋ฅผ ์ง์ํ์ง ์๋ Windows์ฉ GCC 9๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ ๋ณด์์ต๋๋ค.
@lnicola
Windows GCC 9 ๋น๋๋ -fuse-ld=lld
๋ฅผ ์ง์ํฉ๋๋ค(์ง์ํ์ง ์๋๋ก ํจ์น๋์์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ์ง์ํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?).
rust-mingw
๊ตฌ์ฑ ์์๊ฐ ์ค์น๋์๊ณ ๋ง์ปค๊ฐ .cargo/config
์์ ์ฌ์ ์๋์ง ์์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๊ทธ๋ฐ ์์ผ๋ก Rustc๋ ์์คํ
๋์ GCC 6์ ์ ํํ์ต๋๋ค.
Windows์ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ LLD 9 ๋ฐ ์ด์ ๋ฒ์ ์ด ์ง์ํ์ง ์๋ ํ๋์ฝ๋ฉ๋ ๋ง์ปค ํ๋๊ทธ --enable-long-section-names
์
๋๋ค(ํฅํ ์ง์ํ ๊ณํ ์์). ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
Windows์ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ LLD 9 ๋ฐ ์ด์ ๋ฒ์ ์ด ์ง์ํ์ง ์๋ ํ๋์ฝ๋ฉ๋ ๋ง์ปค ํ๋๊ทธ --enable-long-section-names์ ๋๋ค(ํฅํ ์ง์ํ ๊ณํ ์์).
์ด ๋ถ๋ถ์ https://github.com/rust-lang/rust/pull/66257์ ์ํด ์์ ๋์์ต๋๋ค.
Windows-gnu ์ฌ์ฉ์๋ -fuse-ld=lld
๋ฅผ ์ง์ํ๋ C ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ฌ์ ํ ์๋ ์์
์ ํด์ผ ํฉ๋๋ค.
@bstrie : ์ด๊ฒ์ Windows-MSVC์ Stable ๋ฐ Nightly์์ ์๋ํ๋ฉฐ ์์ธํ ๋ด์ฉ์ ์ด gamedev-wg ๋ฌธ์ ์ ์ฒซ ๋ฒ์งธ ๊ฒ์๋ฌผ: https://github.com/rust-gamedev/wg/issues/50
๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ํฌ์ธํธ: rustc
์์ฒด๋ฅผ ๋น๋ํ ๋ RUSTFLAGS="-C link-arg=-fuse-ld=lld"
ํ๋ฉด ๋น ๋ฅธ 14์ฝ์ด Linux ์์์์ ์ฐ๊ฒฐ ์๊ฐ์ด 93์ด์์ 41์ด๋ก ๋จ์ถ๋ฉ๋๋ค.
@nnethercote : ์ค์ ๋ค๋ฅด์ง๋ linker=lld
(์๋ฅผ ๋ค์ด)์์ [target.x86_64-unknown-linux-gnu]
์ ๋จ๋ฉด config.toml
?
@Aaron1011 : ๋ด ์ถ์ธก์ผ๋ก๋ ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ด ๋์ผํ ํจ๊ณผ๋ฅผ ๊ฐ์ง ์ ์์ง๋ง ์ง์ ํ์ธํ์ง๋ ์์์ต๋๋ค.
@Aaron1011 ์๋ฆฌ๊ฐ ๋์ผ ํฉ๋๋ค. https://github.com/rust-lang/rust/issues/39915#issuecomment -538049306์ ์ฐธ์กฐ
@mati865
LLD๋ฅผ ๋ง์ปค๋ก ์ฌ์ฉํ์ฌ x86_64-pc-windows-gnu
์ rustc
๋น๋๋ฅผ ์๋ํ์ต๋๊น?
์ค๋ ์๋ํ๋๋ฐ LLD๊ฐ ๋น๋ ์ค๊ฐ์ ๋ฉ์ถ๊ณ ์์
์ ์ค์งํ๊ฑฐ๋ unknown argument: --version-script=...
๋ํด ๋ถํํฉ๋๋ค.
LLD๊ฐ LLVM ์ฐ๊ฒฐ์๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์๋ ์ค๋จ์ด ๋ฐ์ํฉ๋๋ค.
[llvm]
use-linker = "lld"
๋๊ตฌ ๋ฒ์ :
$ ld.lld --version
LLD 9.0.1 (https://github.com/msys2/MINGW-packages.git 5e3b8820ed9f04221affee4197e458aca2612e87) (compatible with GNU linkers)
$ gcc --version
gcc.exe (Rev2, Built by MSYS2 project) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@petrochenkov ์, ๋ช ๊ฐ์ง ํดํน์ผ๋ก ๋น๋ํ ์ ์์ต๋๋ค.
.def
ํ์ผ์์ ๊ด์ฐฎ์ต๋๋ค. ํด๊ฒฐํ๊ธฐ ์ฌ์ดlib
(UNIX ์ธ๊ณ์ ํ์ค)๋ก ์์ํ๊ธฐ๋ฅผ ๊ธฐ๋ํ์ง๋ง ์ด๋ป๊ฒ๋ Rust๋ ๋ชจ๋ windows-*
๋์์ ๋ํด ์ด๋ฅผ ์ํํ์ง ์์์ต๋๋ค: https://github.com/rust-lang/ ๋
น/๋ธ๋กญ/9ebf47851a357faa4cd97f4b1dc7835f6376e639/src/libstd/sys/windows/env.rs#L4๋๋ ์ฌ๊ธฐ์ ๋ช ๊ฐ์ง ๋ฏธ๋ ๊ฐ๋ฅ์ฑ์ ๊ธฐ๋กํ๊ณ ์์ต๋๋ค. ๋ช ๊ฐ์ง ๊ตฌํ ๋ ธ๋ ฅ์ด ํ์ํ์ง๋ง, ์ด๊ฒ์ด Rust ๊ฐ๋ฐ์ ์ค๋ ๊ณ ์ถฉ์ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ง์ปค ๋ช ๋ น์ผ๋ก lld์ ๋ง์ ๊ฒฝ๋ก ์ด๋ฆ์ ์ ๋ฌํ๋ ๋์ ๊ฐ์ ํ์ผ ์์คํ ์ ์ฌ์ฉํ๊ณ ์ํํ ์ถฉ๋ถํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์์ ๋๋ง๋ค ๋์คํฌ IO๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฉ๋ชจ๋ฆฌ๋ก ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. ๋ ํฐ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์๋ฐฑ ๋๋ ์์ฒ ๋ฉ๊ฐ๋ฐ์ดํธ์ ๋์คํฌ IO๋ฅผ ์ ์ฝํ ์ ์์ผ๋ฏ๋ก ์ปดํ์ผ ์๊ฐ์ด ํฅ์๋ฉ๋๋ค.
IO ๋์ญํญ์ ๋ฌธ์ ๋ง์ ์๋๋๋ค. Windows์ ๊ฐ์ ํ๋ซํผ์์, ํนํ Windows Defender๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ ์์ ํ๋ ค๋ ๊ฐ ํ์ผ์ ์๋นํ ์๊ฐ ํจ๋ํฐ๋ฅผ ์ถ๊ฐํ๊ณ Rust์ codegen ๋จ์ ๋ชจ๋ธ์ ํฌ๋ ์ดํธ๊ฐ ์๋ฐฑ ๊ฐ์ ์์ ๊ฐ์ฒด ํ์ผ๋ก ๋ถํ ๋์ด ๋ง์ ์ปดํ์ผ์ ๋น ๋ฅด๊ฒ ์์ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์๊ฐ.
์ด ๋ฒ๊ทธ๋ ์ฝ๊ฐ ์๋ง์ ๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ ์์ผ๋ก ๋์๊ฐ๊ณ ์ ํ๋ ์ฌ๋๋ค์ ์ํด ํ์ฌ ์ํฉ์ ๋ํ ๊ฐ๋ตํ ์์ฝ์ ์ต์ ์ ๋คํ๊ฒ ์ต๋๋ค.
๋ ๊ฐ์ง ์ด์ ๋ก ๋ฐ๋์งํ llvm ํ๋ก์ ํธ์ ์ผ๋ถ์ธ ๋ง์ปค:
๋ํ ์ผ๋ฐ์ ์ผ๋ก lld๋ ์ต์ ๋ฒ์ ์ด๋ฉฐ ๋๋ถ๋ถ์ OS์์ ๊ธฐ๋ณธ๊ฐ์ด ์๋๋๋ค. ๋ ๋ง์ ๊ณณ์์ ์ด๊ฒ์ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด ์์์ ํธํ ๋ฒ๊ทธ๊ฐ ๊ฑฐ์ ํ์คํ๊ฒ ๋ํ๋ ๊ฒ์ ๋๋ค.
๋ ํ๋ซํผ์์ ๊ธฐ๋ณธ์ ์ผ๋ก (rust-)lld๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ง์คํ๊ธฐ ์ํด ๋ ๊ฐ์ ๋ฉํ๋ฒ๊ทธ๋ฅผ ์ ์ถํ์ต๋๋ค.
windows-msvc๋ ์ํ๊ฐ ์ํธํ๊ณ ๋ฐฑ์๋์์ rust-lld ์ฌ์ฉ์ ์ ํ์ ์ผ๋ก ์ง์ํ์ง๋ง ์ฌ๊ธฐ์ ์ํํด์ผ ํ ์์ ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
LLD + windows-msvc
์ํ๊ฐ ์๋นํ ์ํธํ๋ฉฐ ํ์ฌ rustc
๊ฐ๋ฐ์ ์ด ์ค์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
lld-link
ํ์ํ ๋ชจ๋ ์ง์์ rustc
๋ฐฑ์๋์ ์์ง๋ง https://github.com/rust-lang/rust/issues/68647 ๊ณผ ๊ฐ์ ๋ฒ๊ทธ๊ฐ
- ์ด๊ฒ์ ์ค์ํ ์ ์์ต๋๋ค. ๋ถ๋ช ํ lld๋ "ld" ๋๋ "ld.lld"๋ก ์คํ๋๊ณ ์๋์ง์ ๋ํ clang ์คํ์ผ์ ๋ฐ์ด๋๋ฆฌ ์ด๋ฆ ๊ฐ์ง๋ฅผ ์ํํฉ๋๋ค(์กฐ์ฌ ํ์)
ํ์ง๋ง ld์ ld.lld๋ ๊ฐ์ ๋ชจ๋์ ๋๋ค: https://github.com/rust-lang/llvm-project/blob/rustc/10.0-2020-02-05/lld/tools/lld/lld. cpp (8.0-2019-01-16๋ถํฐ ๋์ผ)
- ๋ถํํ๋ -fuse-ld=lld๋ GCC 9์ ์ผ๋ถ์ผ ๋ฟ์ด๋ฏ๋ก ์ด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๊ธฐ๋ฅ/๋ฒ์ ๊ฐ์ง๊ฐ ํ์ํ ์ ์์ต๋๋ค(clang์ ์ค๋ซ๋์ ์ฌ์ฉํ์ต๋๋ค)
ld.lld๋ ld์ ๋์ผํ๊ณ https://patches-gcc.linaro.org/patch/11148/ ์ ๋ฐ๋ฅด๋ฉด -fuse-ld=lld์ ์ ์ผํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ld ๋์ ld.lld๋ฅผ ์คํํ๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ PATH ์ฃผ์ ์ ์ฌ์ฉํฉ๋๋ค. ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค. ๋๋ ์ด๊ฒ์ gcc 9+๋ก ์ ๊ทธ๋ ๊ฒ์ ์ข์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋น์ ์์ ๋ฒ์ ์ 8.3๋ง ์๊ณ ๋ถ์ค์์ด๋ ์๋ง๋ 2021๋ ๊น์ง ์ถ์๋์ง ์์ ๊ฒ์ ๋๋ค.
- windows-mingw๋ ๊ณ ๋ GCC๋ฅผ ์ป์ ์ ์๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ linux/unix์ ๊ฑฐ์ ๊ฐ์ ์์น์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ pseudo-windows-linux๊ฐ ์ ๋๋ก ํ ์คํธ๋ ๊ตฌ์ฑ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ํฉ์ด ์ฝ๊ฐ ๋ถ์์ ํฉ๋๋ค.
mingw-w64 6.0.0(2018-09-16 ์ถ์)์๋ gcc 8.3.0์ด ์์ผ๋ฉฐ -fuse-ld=lld๊ฐ ์์ง๋ง ์ฌ์ ํ ์๋นํ ์๋กญ์ต๋๋ค. mingw-w64 7.0.0(2019-11-11 ๋ฆด๋ฆฌ์ค)์๋ -fuse-ld=lld๊ฐ ์๋ gcc 9.3.0์ด ์์ต๋๋ค. ๋ฐ๋น์ ๋ฒ์คํฐ(์์ )๋ 6.0.0์ด๊ณ ๋ถ์ค์์ด(ํ ์คํธ)๋ 7.0.0์ ๋๋ค. ๋ฐ๋น์ ์คํธ๋ ์น(oldstable)์๋ gcc 6.3.0์ด ํฌํจ๋ 5.0.1๋ง ์์ง๋ง, gcc 6.3์ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ lld ์ง์์ ์ํด ์ต์ ๋ฐ๋น์ ์์ ์ ์๊ตฌํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ ํ๋ซํผ์์ ๊ธฐ๋ณธ์ ์ผ๋ก (rust-)lld๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ง์คํ๊ธฐ ์ํด ๋ ๊ฐ์ ๋ฉํ๋ฒ๊ทธ๋ฅผ ์ ์ถํ์ต๋๋ค.
lld์ macOS(Mach-O) ํฌํธ ์ ๋ณด: https://github.com/rust-lang/rust/issues/39915#issuecomment -618726211 ์ดํ๋ก ์๋ํ๊ฑฐ๋ ์ต์ํ ํจ์ฌ ๋ ๋์ ์ํ๋ฅผ ์ ์งํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ฑ๋์์ต๋๋ค!
์ด LLVM ์ปค๋ฐ์ ์ฌ์ฉํ์ฌ lld
๋น๋ํ๊ณ tokio-rs/tracing์ ๋ํ ํ๋ก์ ํธ๋ณ ๋ง์ปค๋ก ์ค์ ํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ nightly-x86_64-apple-darwin
์ ๋ํ ์ถ์ ์ ๊ตฌ์ถํ๊ณ ๋ชจ๋ ํ
์คํธ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์คํํ์ต๋๋ค. (๋๋ฒ๊ทธ) ๋น๋ ์๊ฐ์ ๋ํด ํนํ ๋ง์กฑํฉ๋๋ค.
ld
๋ฅผ ์ฌ์ฉํ๋ฉด ๊นจ๋ํ cargo build
์ 35์ด๊ฐ ๊ฑธ๋ ธ์ต๋๋ค.lld
๋ก ๊นจ๋ํ cargo build
๋ 20์ด๊ฐ ๊ฑธ๋ ธ์ต๋๋ค.์ฐธ๊ณ :
@davidbarsky ๋ฉ์ง๋ค! ํธ๊ธฐ์ฌ์ ๊ทธ ์ฑ๋ฅ์ zld
์ ๋น๊ตํ๋ฉด ์ด๋ป์ต๋๊น? ( https://github.com/michaeleisel/zld )
๋ํ ์ด์ ๊ณ ๋ ค ํ์ต๋๊น? MBP๋ ํนํ ๊ธฐ๋ณธ ํฌ ์๋ ํ๋กํ์ ์ฌ์ฉํ์ฌ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ด ์กฐ์ ์ ๋ค์ด๊ฐ๋๋ค. ๋ฌ๋ฆฌ๊ธฐ๋ฅผ ํ๊ธฐ ์ ์ ๊ฒฝ์ฒฉ ๊ทผ์ฒ์ ์๋ ๊ธฐ๊ณ ๋ฐ๋ฅ์ด ๋ง์ก์ ๋ ์์ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ฉด ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋๋ Ubuntu 16 i686์์ ๊ทธ๋ฐ ๋ฒ๊ทธ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ๋ฒ๊ทธ๋ ์ฝ๊ฐ ์๋ง์ ๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ ์์ผ๋ก ๋์๊ฐ๊ณ ์ ํ๋ ์ฌ๋๋ค์ ์ํด ํ์ฌ ์ํฉ์ ๋ํ ๊ฐ๋ตํ ์์ฝ์ ์ต์ ์ ๋คํ๊ฒ ์ต๋๋ค.
lld ๋ ๋ฌด์์ ๋๊น?
๋ ๊ฐ์ง ์ด์ ๋ก ๋ฐ๋์งํ llvm ํ๋ก์ ํธ์ ์ผ๋ถ์ธ ๋ง์ปค:
์ค๋๋ Rust๊ฐ lld๋ก ํ๋ ์ผ
๋ ๋ง์ ๊ณณ(์: ๋ฐ์คํฌํ linux/mac/windows)์์ rust-lld๋ฅผ ์ฌ์ฉํ ๋์ ๋ฌธ์
๋ํ ์ผ๋ฐ์ ์ผ๋ก lld๋ ์ต์ ๋ฒ์ ์ด๋ฉฐ ๋๋ถ๋ถ์ OS์์ ๊ธฐ๋ณธ๊ฐ์ด ์๋๋๋ค. ๋ ๋ง์ ๊ณณ์์ ์ด๊ฒ์ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด ์์์ ํธํ ๋ฒ๊ทธ๊ฐ ๊ฑฐ์ ํ์คํ๊ฒ ๋ํ๋ ๊ฒ์ ๋๋ค.
๋ ํ๋ซํผ์์ ๊ธฐ๋ณธ์ ์ผ๋ก (rust-)lld๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ง์คํ๊ธฐ ์ํด ๋ ๊ฐ์ ๋ฉํ๋ฒ๊ทธ๋ฅผ ์ ์ถํ์ต๋๋ค.