LINUX.ORG.RU

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

 , , ,


0

3

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

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

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

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

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

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

★★★★★

Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от 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 ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.