Страницы

Поиск по вопросам

вторник, 2 апреля 2019 г.

Очень большой размер исполняемого модуля

Я - полный новичёк. Естественно, собрал и запустил 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. Так и должно быть ?


Ответ

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

Комментариев нет:

Отправить комментарий