#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
Комментариев нет:
Отправить комментарий