λΉλ κ·μΉ
Chromium λΉλμμ λ€μμ ν¬ν¨νλ //ui/base/BUILD.gn
μ μ Rust νκ²μ μΆκ°ν©λλ€.
#![allow(unused)] fn main() { #[no_mangle] pub extern "C" fn hello_from_rust() { println!("Hello from Rust!") } }
μ€μ: μ¬κΈ°μ no_mangle
μ Rust μ»΄νμΌλ¬μ μν΄ μμ νμ§ μμ μ νμΌλ‘ κ°μ£Όλλ―λ‘ gn
νκ²μμ μμ νμ§ μμ μ½λλ₯Ό νμ©ν΄μΌ ν©λλ€.
μ΄ μλ‘μ΄ Rust νκ²μ //ui/base:base
μ μ’
μ νλͺ©μΌλ‘ μΆκ°ν©λλ€. μ΄ ν¨μλ₯Ό ui/base/resource/resource_bundle.cc
μ 맨 μμμ μ μΈν©λλ€. λμ€μ λ°μΈλ© μμ± λκ΅¬λ‘ μλννλ λ°©λ²μ μ΄ν΄λ΄
λλ€.
extern "C" void hello_from_rust();
ui/base/resource/resource_bundle.cc
μ μ΄λκ°μμ μ΄ ν¨μλ₯Ό νΈμΆν©λλ€. ResourceBundle::MaybeMangleLocalizedString
μ μλ¨μ΄ μ’μ΅λλ€. Chromiumμ λΉλνκ³ μ€ννμ¬ βHello from Rust!βκ° μ¬λ¬ λ² μΆλ ₯λλμ§ νμΈν©λλ€.
VSCodeλ₯Ό μ¬μ©νλ κ²½μ° μ΄μ VSCodeμμ μ μλνλλ‘ Rustλ₯Ό μ€μ ν©λλ€. μ΄ν μ°μ΅μμ μ μ©ν©λλ€. μ±κ³΅νλ©΄ println!
μμ βμ μλ‘ μ΄λβμ λ§μ°μ€ μ€λ₯Έμͺ½ λ²νΌμΌλ‘ ν΄λ¦ν μ μμ΅λλ€.
λμμ λ°μ μ μλ κ³³
rust_static_library
gn ν νλ¦Ώμμ μ¬μ© κ°λ₯ν μ΅μ #[no_mangle]
μ κ΄ν μ 보extern "C"
μ κ΄ν μ 보- gnμ
--export-rust-project
μ ν μ 보 - VSCodeμμ rust-analyzerλ₯Ό μ€μΉνλ λ°©λ²
μ΄ μλ μ΅μ 곡ν΅λΆλͺ¨ μνΈ μ΄μ©μ± μΈμ΄μΈ Cλ‘ κ·κ²°λκΈ° λλ¬Έμ μΌλ°μ μ΄μ§ μμ΅λλ€. C++μ Rust λͺ¨λ κΈ°λ³Έμ μΌλ‘ C ABI ν¨μλ₯Ό μ μΈνκ³ νΈμΆν μ μμ΅λλ€. μ΄ κ³Όμ μ νλ°λΆμμ C++λ₯Ό Rustμ μ§μ μ°κ²°ν©λλ€.
μ¬κΈ°μ allow_unsafe = true
κ° νμν μ΄μ λ #[no_mangle]
μ΄ Rustκ° μ΄λ¦μ΄ κ°μ ν¨μ λ κ°λ₯Ό μμ±ν μ μλλ‘ ν μ μκ³ Rustλ λ μ΄μ μ¬λ°λ₯Έ ν¨μκ° νΈμΆλλ€κ³ 보μ₯ν μ μκΈ° λλ¬Έμ
λλ€.
μμν Rust μ€ν νμΌμ΄ νμνλ©΄ rust_executable
gn ν
νλ¦Ώμ μ¬μ©νλ©΄ λ©λλ€.