#linux #rust
Я - полный новичёк. Естественно, собрал и запустил hello_world. Потом посмотрел размер исполняемого модуля: $ ls -l итого 664 drwxrwxr-x 2 lary lary 4096 мар 1 2017 build drwxrwxr-x 2 lary lary 4096 мар 1 2017 deps drwxrwxr-x 2 lary lary 4096 мар 1 2017 examples -rwxrwxr-x 1 lary lary 657056 мар 1 2017 hello_world drwxrwxr-x 2 lary lary 4096 мар 1 2017 native Цифра 657056 меня как-то огорчила. Я решил, что раз это дебажная сборка, то просто понапихали туда всякой отладочной информации, вот он и здоровенный такой. Решил собрать релиз. Посмотрел: $ ls -l итого 5152 drwxrwxr-x 2 lary lary 4096 май 22 17:57 build drwxrwxr-x 2 lary lary 4096 май 22 17:57 deps drwxrwxr-x 2 lary lary 4096 май 22 17:57 examples -rwxrwxr-x 2 lary lary 5236496 май 22 17:57 hello_world -rw-rw-r-- 1 lary lary 102 май 22 17:57 hello_world.d drwxrwxr-x 2 lary lary 4096 май 22 17:57 incremental drwxrwxr-x 2 lary lary 4096 май 22 17:57 native И стало мне совсем грустно. Я что-то делаю не так? Или это - нормально? По всей видимости, собран модуль, в который статически прилинкован весь run-time. Так и должно быть ?
Ответы
Ответ 1
En SO: Why are Rust executables so huge? Если кратко, то rust по умолчанию влинковывает статически всю свою libstd. Дабы воздержать его от этого можно скормить ему -C prefer-dynamic в аргументы: $ cat hw.rs pub fn main() { println!("Hello world!"); } $ rustc hw.rs -o hw-rust.static $ rustc hw.rs -C prefer-dynamic -o hw-rust.dynamic $ ls -lh hw* -rw-r--r-- 1 alexander users 48 май 24 08:06 hw.rs -rwxr-xr-x 1 alexander users 14K май 24 08:17 hw-rust.dynamic -rwxr-xr-x 1 alexander users 3,0M май 24 08:16 hw-rust.static Update* Стоит иметь в виду, что стабильного ABI у Rust пока нет, и как soname, так и символы динамической линковки меняются от версии к версии. Единственный практически поддерживаемый вид динамических крейтов — cdylib, но это используется для создания плагинов с C-совместимым внешним интерфейсом, а не для «родных» динамических библиотек. * За замечание спасибо @mzabaluev
Комментариев нет:
Отправить комментарий