LINUX.ORG.RU

Сборка раст-проекта под винду из генты или как же я ненавижу винду

 , , ,


0

4

https://github.com/Vladgobelen/NSQCu/tree/main/RUST/nightwatch-updater

Не знаю каким чудом, но я написал такое. Оно собирается, и даже работает под линуксом. В теории раст кроссплатформенный и это можно собрать под винду? Может кто подсказать - как?

ИИ в расте полные нули. Спрашивал у всех доступных идеи - они бесполезны. Они даже базовых понятий раста не понимают.

Сутки уже бьюсь. С mingw доходит компиляция до последнего шага и замирает навсегда. С кросскомпиляцией компилится. Но не работает.

Куда хоть копать вообще?

Решение: собрал гитхабом

Перемещено hobbit из general

★★★★★

Последнее исправление: LightDiver (всего исправлений: 2)
Ответ на: комментарий от neumond

Это я уже перечитал раз 50. Все это понятно.

[package]
name = "nightwatch-updater"
version = "0.1.0"
edition = "2021"

[dependencies]
winapi = { version = "0.3", features = ["winuser", "libloaderapi", "errhandlingapi"] }
anyhow = "1.0"
egui = "0.24"
eframe = { version = "0.24.1", features = ["persistence", "glow"], default-features = false }
reqwest = { version = "0.11", features = ["blocking", "json"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = { version = "1.0", features = ["preserve_order"] }
zip = "0.6"
tempfile = "3.5"
log = "0.4"
env_logger = "0.11"
indexmap = { version = "1.9", features = ["serde-1"] }

[profile.release]
opt-level = "z"
lto = "thin"
strip = "symbols"

[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
rustflags = ["-C", "link-args=-static -lssp"]

Вот, если использовать mingw, без ошибок, предупреждений застывает на последнем шаге:

   Compiling bzip2 v0.4.4
   Compiling zstd v0.11.2+zstd.1.5.2
   Compiling zip v0.6.6
   Compiling nightwatch-updater v0.1.0 (/home/diver/sources/RUST/nightwatch-updater)
    Building [=======================> ] 281/282: nightwatch-updater(bin)   

Можно как то узнать почему? Где то логи?

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от neumond

А скинь бинарник на пробу, а? И ты что то менял?

Фичу да, я ее кручу туда сюда уже полсуток. Я написал все это быстрее, чем пытаюсь собрать.

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от LightDiver

Повторить не получается. После

git clone ...
rustup +stable target add x86_64-pc-windows-gnu
apt install mingw-w64
cargo +stable build --release --target x86_64-pc-windows-gnu

получаю

   Compiling eframe v0.24.1
error[E0432]: unresolved import `winapi::um::winuser`
...

$ cargo +stable --version
cargo 1.85.0 (d73d2caf9 2024-12-31)

Если обновить зависимости на последние (и немного поправить исходник), то всё собирается и работает.

Логи можно включить через RUSTC_LOG=info, предварительно сделав cargo clean, но их там слишком много.

red75prim ★★★
()
Последнее исправление: red75prim (всего исправлений: 1)
Ответ на: комментарий от red75prim

winapi = { version = «0.3», features = [«winuser»] }

..и обновить зависимости, а можно чуть подробнее в этом месте? Фичи то я добавляю, после чего и получаю «вечную компиляцию».

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver
[dependencies]
anyhow = "1.0"
egui = "0.31.0"
eframe = { version = "0.31.0", features = ["persistence"] }
reqwest = { version = "0.12.12", features = ["blocking", "json"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = { version = "1.0", features = ["preserve_order"] }
zip = "2.2.3"
tempfile = "3.5"
log = "0.4"
env_logger = "0.11"
indexmap = { version = "2.7.1", features = ["serde"] }
red75prim ★★★
()
Ответ на: комментарий от neumond

А вот хрен там:

2" "-lwinapi_cfgmgr32" "-lwinapi_gdi32" "-lwinapi_kernel32" "-lwinapi_msimg32" "-lwinapi_ole32" "-lwinapi_opengl32" "-lwinapi_shell32" "-lwinapi_user32" "-lwinapi_winspool" "-lwindows" "-lwindows.0.52.0" "-lwindows.0.48.5" "-lwindows.0.52.0" "-lwindows.0.52.0" "-lwindows.0.52.0" "-lkernel32" "-lkernel32" "-ladvapi32" "-lntdll" "-luserenv" "-lws2_32" "-ldbghelp" "-lgcc_eh" "-l:libpthread.a" "-lmsvcrt" "-lmingwex" "-lmingw32" "-lgcc" "-lmsvcrt" "-lmingwex" "-luser32" "-lkernel32" "-Wl,--nxcompat" "-L" "/home/diver/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/winapi-x86_64-pc-windows-gnu-0.4.0/lib" "-L" "/home/diver/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/windows_x86_64_gnu-0.52.6/lib" "-L" "/home/diver/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/windows_x86_64_gnu-0.48.5/lib" "-L" "/home/diver/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/windows_x86_64_gnu-0.42.2/lib" "-L" "/home/diver/sources/RUST/NU/nightwatch-updater/target/x86_64-pc-windows-gnu/release/build/bzip2-sys-c7a8cbc74d10bce2/out/lib" "-L" "/home/diver/sources/RUST/NU/nightwatch-updater/target/x86_64-pc-windows-gnu/release/build/zstd-sys-ac13212882e5a068/out" "-o" "/home/diver/sources/RUST/NU/nightwatch-updater/target/x86_64-pc-windows-gnu/release/deps/nightwatch_updater-6e0ad01cdbc90edd.exe" "-Wl,--gc-sections" "-no-pie" "-Wl,-O1" "-Wl,--strip-debug" "-nodefaultlibs" "/home/diver/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-gnu/lib/rsend.o"
    Building [=======================> ] 295/296: nightwatch-updater(bin)    

Эти логи то я врубал. Останавливается на этом и все - навсегда.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver
mingw-w64/noble,now 11.0.1-3build1
rustc 1.84.0 (9fc6b4312 2025-01-07)
cargo 1.84.0 (66221abde 2024-11-19)

Не знаю. Попробуй в докере в убунте собрать. У тебя как будто бы линкер зависает, у меня ничего не зависало.

neumond
()
Ответ на: комментарий от red75prim

Аналогично. Может памяти мало и своп лезет и надо до талого ждать.

neumond
()

Может не навсегда, нужно попробовать подождать подольше) Посмотрите какой процесс вообще выполняется, может присобачиться к нему strac-ом и получится понять на чем завис (если завис)

nikolnik ★★★
()
Ответ на: комментарий от LightDiver

winapi = { version = «0.3», features = [«winuser»] }

Если библиотека сама не добавила нужную фичу, то скорее всего в этой библиотеке баг. Поэтому я первым делом обновил версии egui, eframe до 0.31. В моем ответе выше есть [dependencies]

red75prim ★★★
()
Ответ на: комментарий от red75prim

Я обновил все версии по советам выше. Сейчас пробую собрать. Сгенерировало уже 5,5гб. Жду.

LightDiver ★★★★★
() автор топика

у меня собралось, убунта, версия egui 0.27.2 может с библиотеками mingw в генте что не так

zurg
()
Ответ на: комментарий от LightDiver

У меня такая же команда линкует за пару секунд. Вся сборка с нуля 1m 53s.

cargo +stable build --release --target x86_64-pc-windows-gnu

Что-то ты перемудрил с линкером. У меня кстати того конфига нигде нет, где linker/rustflags.

neumond
()

растоболью доволен, топик можно закрывать

gagarin0
()
Ответ на: комментарий от neumond

А чего делать то? У всех собирает, кроме меня. Что за паскудство то?

Хоть скиньте результат, гляну - работает ли под вайном хотя бы. Или надо переделывать вообще.

https://s.iimg.su/s/01/RozyB9g7rkGFgG2pBGb2060ceNv1Q2x2rS7ybaEk.png

А память то растет. Может оно собирает, только медленно?

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 2)
Ответ на: комментарий от LightDiver

собрать нативно с msvc, скорее всего ещё понадобится с wgpu рендером собирать

zurg
()
Последнее исправление: zurg (всего исправлений: 1)
Ответ на: комментарий от LightDiver

Собирай в докере в убунте.

FROM docker.io/library/ubuntu:noble
RUN apt update
RUN apt install -y git bash build-essential mingw-w64
RUN addgroup builder && \
    adduser --ingroup builder \
    --disabled-login \
    --home /home/builder \
    builder
USER builder
WORKDIR /home/builder
#!/usr/bin/env fish
docker build -t binbuilder .
or exit 1
set output (realpath (dirname (status -f)))'/output'
docker run --rm -it \
    --mount 'type=volume,src=binbuilder,dst=/home/builder' \
    --mount 'type=bind,src='$output',dst=/home/output' \
    binbuilder bash

И там rustup, add target, cd /home/output, git clone, cargo build.

neumond
()
Последнее исправление: neumond (всего исправлений: 1)
Ответ на: комментарий от neumond

Не, это точно не вариант. Или чинить мою генту или думать что то про винду. Третью ось тянуть точно не буду.

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от LightDiver

Ну как ось. Ядро будет твоё, от генты. Сверху там наверное 200мб от убунты, минимальный набор. Можешь и в alpine собрать, он совсем тонкий. Главное что это запруфает что ты сломал себе линкер в генте (или не ты, они любят там патчи свои набрасывать на всё подряд).

neumond
()
Ответ на: комментарий от neumond

Вот про линкер чуть чуть контента бы. Как его починить.

Я так то на кальке, тут все практически бинарное. Я уже лет 12 сам ничего не собирал специально.

LightDiver ★★★★★
() автор топика

а ты не пробовал на гитхабе поискать всякин github workflows и подсмотреть там команды?

rtxtxtrx ★★★
()
Ответ на: комментарий от rtxtxtrx

Хренасе, до чего техника дошла.. Где ж ты раньше был. Осваиваю новые возможности, спасибо.

LightDiver ★★★★★
() автор топика

Что-то не работает под линуксом: ты не виновата, моя девочка.

Что-то не работает под виндой: ах ты мерзкий тупой осёл …

kaldeon
()
Ответ на: комментарий от kaldeon

Так под линуксом и не работает. Работает ли под виндой - хрен знает. Нету у меня винды. А надо сделать народу под винду программу. Бесит люто.

https://github.com/Vladgobelen/NSQCuR

Вот, даже собрало под винду, линукс, мак. Линуксовое идеально работает. Виндовое под вайне не пашет.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от rtxtxtrx

Спасибо огромнейшее. Собрал гитхабом. Протестил на первом юзвере - пашет!

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от rtxtxtrx

20 hours ago Queued

Херня этот ваш гитхаб оказался. Чуть пособирал и забанили к херам. Надо ставить всетаки винду в виртуалку и там если что собирать для таких случаев.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

А что ты собираешь так долго? Там ограничение на процессорное время из-за майнеров и прочих странных личностей. Он для сборки своих проектов хорош, но ты там, видать, генту компилишь

rtxtxtrx ★★★
()
Ответ на: комментарий от rtxtxtrx

Да я интереса ради попытался перегнать проект на андроид. Ошибка за ошибкой, раз на 25-30 где то меня и забанило. Так что все все, алес капут.

Но основной проект успел доработать полностью до завершения. Тут все норм.

И это не долго - это 20 часов в очереди. Оно не собирает. Оно меня тупо забанило. Одна сборка пару минут занимала. От 2 до 8.

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 2)
Ответ на: комментарий от LightDiver

Там нет бана. Ты израсходывал лимит. Я не помню он месячный или недельный. Нужно было про лимиты почитать перед этим.

rtxtxtrx ★★★
()
Ответ на: комментарий от rtxtxtrx

Ежемесячный лимит времени работы для одного пользователя или организации: 2000 минут (около 33 часов) .

Это я 33 часа нарегенил?! Серьезно? За 2 дня? Да не может быть.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от rtxtxtrx

Максимальное время работы одного workflow: 6 часов .

Да может и получится, хз хз. Блин, я хотел AyuGram там попробовать собрать. А то локально на его сборку надо шибко уж много трафика и времени. Видимо план изначально провальный.. Обидное.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от ripgrep

Да в пень. Надо чинить как то генту и собирать все у себя локально. Это не дело так. Правда я в принципе не понимаю чего где ломается и что чинить.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Правда я в принципе не понимаю чего где ломается и что чинить.

Тогда верным решением собирать ваш кодец в docker окружении где все будет работать «из коробки»

gagarin0
()
Ответ на: комментарий от LightDiver

Да, но это будет не починка генты. Логично?

Расставьте приоритеты, либо шашечки, либо ехать, лично я вообще не понимаю зачем «чинить» генту.

gagarin0
()
Ответ на: комментарий от LightDiver

Надо чинить как то генту и собирать все у себя локально.

Я просто хотел вам сказать, что локальная сборка может обойтись без починки генты.

gagarin0
()
Ответ на: комментарий от gagarin0

Конечно может. Можно много чего сделать, но проблема изначальня в том, что в самой оси что то сломано. Хочется это исправить.

LightDiver ★★★★★
() автор топика
Ответ на: комментарий от LightDiver

Поставь арч. Там все пакеты бинарные:

/mnt/data 1h 9m 56s
❯ yay -Ss ayugram
aur/ayugram-desktop-git 5.8.3.r0.g87da02a-1 (+2 1.00) 
    Desktop Telegram client with good customization and Ghost mode
aur/ayugram-desktop-bin 5.11.1-1 (+5 1.12) 
    Desktop Telegram client with good customization and Ghost mode built by Andontie AUR
aur/ayugram-desktop 5.11.1-1 (+9 0.22) 
    Desktop Telegram client with good customization and Ghost mode.
chaotic-aur/ayugram-desktop-git 5.11.1.r0.g57aebdd-1.1 (45.1 MiB 103.4 MiB) 
    Desktop Telegram client with good customization and Ghost mode
rtxtxtrx ★★★
()
Ответ на: комментарий от rtxtxtrx

У меня калька, тут тоже все пакеты бинарные. Толку то. Только тут в целом управление софтом поудобнее, если вдруг что надо. Вот только аюграма сюда не делают бинарным.

Но вот если бы можно было вытащить арчевые пакеты себе. Нельзя?

LightDiver ★★★★★
() автор топика
Последнее исправление: LightDiver (всего исправлений: 1)
Ответ на: комментарий от LightDiver

зачем? arch для игродрочеров и недопрограммистов, который по степени красноглазия не уступает генте… но есть способ. distrobox. там внутри контейнера поставишь yay, а через него ауеграм. само приложение будет в контейнере с арчем запускаться

rtxtxtrx ★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.