Pull to refresh

Comments 16

Про cross я знаю, мне его на Stackoverflow в прошлом году уже рекомендовали. Но через него нельзя собирать 32битные цели, только 64битные. В общем мне он не подошёл. А по моему рецепту можно и 32bit, и 64bit.
Хм, действительно, 32 бит под винду нет. Возможно, стоит заслать фича-реквест.
Увы, с настройкой кросс-компиляции бинарников проблемы не заканчиваются, а только начинаются. Потому что современные приложения чаще всего подразумевают GUI, который тоже должен быть кроссплатформенным и который тоже надо настроить.
И вот тут-то вдруг выясняется, что в современном мире не существует НИ ОДНОГО вменяемого кроссплатформенного GUI-фреймворка, пригодного для нативных приложений. Люди не просто так массово на Electron пересаживаются, а потому что всё остальное использовать по-настоящему мучительно.
И это не только в Rust-инфраструктуре, это вообще нигде ни шиша нет, даже в мире C/C++. Всё, что имеется — оно жутко раздуто, проблемно в сборке и тянет за собой тонны зависимостей. Даже Qt не позволяет получить итоговый exe менее 5Мб, остальное тащит с собою ещё больше. А уж какое лютое шаманство творится при сборке и сопряжении с Rust…
Для себя нашёл, что из всех сортов дерьма наиболее удобно и компактно происходит написание GUI на (кто бы мог подумать!) Lazarus, а Rust-часть с полезной нагрузкой просто собирается как статическая библиотека (.a или .lib в зависимости от платформы), и всё это потом линкуется с GUI частью в единый бинарник.
В итоге проекты с одним окошком и одной кнопкой «Открыть файл» получаются менее мегабайта по объёму.
А уж какое лютое шаманство творится при сборке и сопряжении с Rust…

А в чем шаманство? Я писал интерфейс на Qt/C++ и логику на Rust. Общение
было с помощью Rust/FFI. Rust/FFI я сам конечно не писал он автоматом генерировался.
Но у меня конечно не было цели влезть в ±5МБ, хотя в теории это возможно,
если статически слинковаться с Qt и выкинуть неиспользуемые функции,
но я проверял давно и с Qt 4.x, возможно с Qt 5.x все хуже (имеется ввиду провверял возможность влезть в ±5 мегабайт).

Я, правда, давненько уже собирал статический exe с qt5, но, помнится мне, в 5 мб он действительно не укладывается, там размер получается раза в 2 больше как минимум, а то и в 3, зависит от набора используемых модулей. С другой стороны, это все равно гораздо меньше, чем тот же Электрон, элементарный hello world на котором занимает в разы больше, там чуть ли не 50-100 мб в зависимости от платформы (самый большой по размеру пакет выходил на macos).

Если собирать релизный бинарник с простым hello world на Rust, то в 2018 он занимал чутка больше 5 мегабайт и чуть поменьше 4 после strip. Сейчас там накрутили кое-чего и с lto и какими-то еще дополнительными параметрами там вроде можно собрать такую программу размером в примерно 1 мегабайт. А вот чтобы собрать меньше — нужно делать немало телодвижений — от простого no_std, до перереализации IO/паник и замены аллокатора. Благо wasm и emded способствуют развитию этого.

там вроде можно собрать такую программу размером в примерно 1 мегабайт

Ну в данном случае мы же говорим не о бинарнике, а разделяемой библиотеке на Rust.
У меня она занимает 27K после strip, думаю с panic=abort можно еще ужать.
Это конечно "hello world" с одной функцией:


#[no_mangle]
pub extern "C" fn add(x: i32) -> i32 {
    x + 1
}

Бинарник собранный в release режиме кстати занимает 207k с main вида 'println!("hello")'.

Тут напрашиваются cargo-xbuild или xargo.

Не, тут же не надо весь sysroot пересобирать, тут можно и малой кровью обойтись.
Да, в Go все проще обстоит: habr.com/ru/post/249449

Кстати, очень удобная штука — можно собирать исполняемые файлы с разными веб-серверами как для ARM систем вроде Raspberry, так даже и для некоторых моделей роутеров если у них процессор с поддерживаемой архитектурой. Например такая команда для сборки под ASUS AC-66:

GOOS=linux GOARCH=mipsle go build
если это все действительно заработало, то круто, не зря хоть время потратил
Естественно заработало, я не просто так этот квест проходил. Ну а если вдруг ещё чего всплывёт, то как я сказал
далее будем решать проблемы по мере их появления (ага, можно сказать что это получается прям какой-то Test-Driven Development, :-)

Но пока проблем тьфу-тьфу-тьфу нет.

Начиналось всё скучно, а вот потом началась драма. Спасибо.

Sign up to leave a comment.

Articles