😇

Cubism SDK Nativeのサンプルがビルド通らない問題と対処法

2024/08/22に公開1

初めに

Next.jsでWeb版Cubism SDKなりCoreなり使おうと思ったら、モジュール読み込みが非同期で、モジュールの前にLive2Dモデルのロードに手を付けてクラッシュするというのが直せなかった
Vite環境なら、絶対にモジュールを先にロードするような仕組みらしく、だからこそ公式サンプルがそうなっているらしい。でも、昔Vue.js触った時、全然問題解決情報でねーぞとキレ散らかしたのでViteフレームワークを触りたくなかった

ので、もうこれNativeSDKビルドしてRustとかから触った方がいいんじゃね? と思い立った次第

なお、どこにも情報がほぼほぼ存在しなかったので、ビルドするまでの悪戦苦闘を示す

データが2種類ある問題

公式サイトGithubリポジトリにそれぞれデータがある
違いは、公式サイトの方にしかCoreデータが入っていない事、Githubの方が新しいよ、とReadmeには書いている事
でも実際にはGithubの方は、FrameworkがLFSらしく、簡単にはcloneできなくていつも空っぽになる。解決策が不明だったので公式サイトのデータを使う事にした
仮にサンプルデータが最新であったとしても、コアデータと付随するFrameworkが変わっていないのなら結局Githubの最新サンプルが役に立つような気がしないからだ

ビルドできない問題

事前データ編

Sampleフォルダーの遥か下にデモデータが入っている
とりあえず今回はRustにバインドして使いたいのでOpenGLで話を進める
しょうもないエラーでコンパイルできなかったら悲しくなるので、Cドライブ直下の“L2D”ディレクトリに配置したとする
するとこうなる

Readmeに従って、先にOpenGLに必要なライブラリのDLを実行させる

./Samples/OpenGL/thirdParty/scripts/setup_glew_glfw.bat

がそれ

Batファイルの中身を見たところ、データのダウンロードをするだけっぽいので特に問題もなく処理は進んだ
でも、これの存在を知らずに2敗した

ビルドプロセス進まない編

VisualStudio2022のビルドツールを入れていたり、Cmake入れていたり、人それぞれだと思うけれど、今回は前者で話を進める。理由はRustが要求してくるから

./Samples/OpenGL/Demo/proj.win.cmake/scripts/proj_msvc2022.bat

を実行したらいいよ、と書いているのだけど、実際に起動すると

(略)
**********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.11.1
** Copyright (c) 2022 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.22631.
CMake Error at CMakeLists.txt:73 (message):
  [Demo] Unsupported Visual C++ compiler used.


-- Configuring incomplete, errors occurred!

となってエラー落ちする
要約すると「変なコンパイラー使うな」らしい
いや、公式だが?

Cmake編集する編

で、BatファイルとCMakeListsの中身を読んでみた
エラーは73行目。理由は変なコンパイラー使うなという事らしい

この辺りが最終行で、遡るとMSVC_VERSIONに何らかの値が代入されていて、さらに遡るとBatファイル内に記述があった

じゃあ2022にすればいいのかと思ったけど変わらずクラッシュするので、つまりお前はいくつが代入されてるんだよと思って書き出してみたら1941だった
おそらく、SDKが公開されてからコンパイラーのこの値が変わってしまったのだと思われる


という訳で、71行目を1940から1950に替えたら無事に起動した。この辺りはGithub版の内容を参考にした

elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1950)

あとはbuildディレクトリのソリューションファイルをVisualStudioで開いて実行すれば無事に起動した
めでたしめでたし


最後に

そもそもRustで既にビルド済みのCoreファイル群を扱えるのか謎であるというのが新しい問題として浮上している
そういうクレートが過去に存在したみたいなので、多分どうにかすれば使えそうな気はしている

Discussion

James0124James0124

いちおう, Cubism Core を Rust で扱うための crate を作っていたりします:
https://github.com/James2022-rgb/live2d-cubism-core-sys
ネイティブ の Windows と Linux と Android のほか, Web 版 を使った WASM ターゲットもいちおう保守していたりします.
(5ヶ月前に SDK 5 に対応させてからちょっと触っていないのですが)