はじめに
この記事は Slint Advent Calendar 2025 17日目の記事です。
Slint の STM32 のビルドが通らなかった
EdgeTech+ 2025 の準備で STM32H735G-DK に printerdemo_mcu をビルドしました。
ドキュメントに記載のあるように 以下のコマンドで完了するはずでした。
CARGO_PROFILE_RELEASE_OPT_LEVEL=s CARGO_TARGET_THUMBV7EM_NONE_EABIHF_RUNNER="probe-rs run --chip STM32H735IGKx" cargo run -p printerdemo_mcu --no-default-features --features=mcu-board-support/stm32h735g --target=thumbv7em-none-eabihf --release
すると、悲しいことに以下のエラーが発生しました。
error: linking with `rust-lld` failed: exit status: 1
= note: rust-lld: error: undefined symbol: __e_slint_assets
>>> referenced by printerdemo_mcu...
rust-lld: error: undefined symbol: __s_slint_assets
>>> referenced by printerdemo_mcu...
rust-lld: error: undefined symbol: __si_slint_assets
>>> referenced by printerdemo_mcu...
examples/mcu-board-support/stm32h735g/memory.x で定義されている .slint_assets が未定義なんだけど?って言っています。
バグレポを書いた
Claude Code といろいろ相談し原因を発見し、以下のバグレポを作成しました。
Cargo 側の変更 の影響を受け、slint が依存している ft5336 クレート に なぜか含まれている memory.x が優先的に利用されてしまっているようです。
修正をした
詳細は上記のバグレポを参照してほしいのですが、ft5336 側を直しても取り込まれる可能性が微妙で、しかもこのクレート以外にもこういうことは起こりうるというような相談をし、 Slint 側で memory.x を提供している場合にはそれを明示的に利用するパッチ を作成し、本体に取り込んでもらいました。
おわりに
1年前にこのボードで遊んだときは問題なく動いていたのですが、開発が活発に進んでいる場所ではいろんなことがあるものです。みなさんも色々試してうまくいかなかったらバグレポ書いたり直したりしましょう!