NDK27に上げるとstd::ofstream等の使用箇所でリンクエラーが出る

お世話になっております。

[Content removed]

で質問し、該当CLを取得してNDKをr27c(27.2.12479018)にアップデートしましたが、

InstallBuildを作成すると、

<br/>

ld.lld: error: undefined symbol: std::__ndk1::basic_filebuf<char, std::__ndk1::char_traits<char>>::basic_filebuf()

<br/>

ld.lld: error: undefined symbol: std::__ndk1::basic_ofstream<char, std::__ndk1::char_traits<char>>::open(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>> const&, unsigned int)

<br/>

ld.lld: error: undefined symbol: std::__ndk1::__libcpp_verbose_abort(char const*, …)

<br/>

とリンクエラーが多発します。

<br/>

特に

//UE4/Main/Engine/Plugins/Experimental/GeometryProcessing/

で起きているようです。

<br/>

どこかでライブラリをリンクしなければならないと思いますが、該当箇所がうまく見つかりません。

AndroidToolChain.csは最新の状態にしております。

なにか他に設定が必要なのでしょうか。

<br/>

ご確認宜しくお願いします。

とりあえず現状、

ld.lld: error: undefined symbol: std::__ndk1::basic_ofstream<char, std::__ndk1::char_traits<char>>::open(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>> const&, unsigned int)

が発生するモジュールはstreamを使ってる処理を全て削除

ld.lld: error: undefined symbol: std::__ndk1::__libcpp_verbose_abort(char const*, …)

が発生するモジュールのBuild.csに

bEnableExceptions = true;

を追加することで、InstallBuildは出来上がるようです。

(ゲームパッケージはこれから作成します)

できればstreamを使ってる処理は復活させたいと思っているので、対処方法が判ればとは思います。

宜しくお願い致します。

お世話になっております。

このプラグインはご利用されていますでしょうか?

__ndk1 はデフォルトの Android STL ですが、通常はリンクされないと思います。現在は libstdc++ のみを使用しています。

UE4.27 の 16K ページ対応については、まだ完全には対応できておらず、作業の途中段階です。

ご指示いただいた方法でエラーを回避できているのであれば、ひとまずその対応で問題ないかと思います。更新があり次第、改めてご連絡いたします。

お手数をおかけしますが、どうぞよろしくお願いいたします。

お世話になっております。

NDKに関しては承知しました。何か変更や更新情報があればここで知らせていただきます。

libplaycore.soからの多数ライブラリへに移動に関しては、今相談しています。もうしばらくお待ちください!

お世話になっております。

ドキュメンテーションを再確認したら、libpaycore.soを利用してもしなくても合わせてAndroidAppBundlehは4GBになっていますが、

https://support.google.com/googleplay/android\-developer/answer/9859372?sjid\=12675013797966204381\-NC\#size\_limits

多数ライブラリーに変更したら変わるところがありますか?

お手数ですが、よろしくお願いします。

お世話になっております。

説明がわかりにくくて申し訳ないです。

libplaycore.soから新しい分割されたPlayライブラリ(com.google.android.play:asset-deliveryなど)に移行しても、サイズ上限は変わりません。

API サーフェスが最新化されるだけです。どちらの場合もサイズ制限は同じです。

4GBのサイズのAABは現在のGooglePADPluginで使用可能です。

パッケージングモードを切り替えて、

  • プロジェクト設定 → プラットフォーム → Android → APK Packaging
  • OBB パッケージングを無効化。
  • Play Asset Delivery (PAD) を使用 を有効化。

アセットパックを定義

  • プロジェクト設定 → Android → Play Asset Delivery:
    • コンテンツフォルダを Install-Time / Fast-Follow / On-Demand に割り当て。
    • 各パックは 1.5GB 以下、ベース APK は 200MB 以下にする。
    • install-time パックの合計は 最大 4GB まで可能。

AAB としてビルド

  • ファイル → パッケージプロジェクト → Android (App Bundle) を選択。
  • Play Console に AAB をアップロード(OBB はもう使用しない)。

で4GBまでinstall-timeを利用可能かと思いますが、もし何か上手く理解できなかったなら教えてください。

お世話になっております。

>4.27Plusだとこの辺変わってくるのでしょうか。

担当者に聞いてみて、検討するようですが、正直いうとその変更がロードマップ的に優先度が低めだと思います。

とりあえず解決できてよかったとです!

NDKの更新がありましたらここで知らせていただきたいと思います。

ご返答ありがとうございます。

了解しました。とりあえず、こちらはUE4.26ベースに色々CLから入れた状態ですが、無事ゲームが起動でき、まだ長期動作チェックはしていませんが、目の付く範囲は正常に動作している事は確認できました。

ですがまだUE4では完全には対応できていないということで、何か動きがあり次第、お知らせ頂ければ幸いです。

あと、CL4397904のコメントではNDK28サポートとありますが、NDK28だとInstallBuild作成時にエラーが発生していたので、UnrealBuildToolに記載されているNDK27(r27c 27.2.12479018)にしております。

ちなみにGoogle側にあまり対処する雰囲気がない、GooglePADプラグインでで使用しているlibplaycore.soですが、その後何か動きはありますでしょうか。

それともGooglePADプラグイン自体を

com.google.android.play:asset-delivery:2.3.0

を適用してJava化してしまうことは検討中でしょうか。

せっかくInstall-timeが4Gまで拡張されたので、せめてそれだけでも対応して頂けると嬉しいです。(現状obbのファイルサイズ制限の2Gに引っかかるのでどうやってもできません。2GオーバーのOBBをEngine改造してaabファイルに入れてもGooglePlayConsole側で弾かれなければ対応しようがあるのですが、その場合でもローカルテスト時にv3署名などに引っかかるのではと思います)

お世話になっております。

>多数ライブラリーに変更したら変わるところがありますか?

質問の意図が判りませんが、libplaycore.soを使用せずに、GooglePADPluginのBlueprintの各関数が使えることができたら最良です。

それとも多数ライブラリに変更した場合、PlayAssetLibrary以外の既存の処理になにか変更ありますでしょうか。

そうではなく、GooglePADPluginを使用せずとも、4Gバイトのaabファイル(この場合aabファイルに含まれるのは全てinstall-timeアセット)が作成できるのならその方法を教えて頂ければと思います。

obbファイルですが、現状チェックを外していても、aabに含まれるのは​

obbassets-master.apkで、obbassets-master.apkの中を開くとmain.obb.pngが入っており、obbファイルは初期チャンクに関しては有効になってると思っておりました。

4.27Plusだとこの辺変わってくるのでしょうか。​

​あと申し訳ございません。

libplaycore.soですが、

https://developer.android.com/guide/playcore/in\-app\-review/native?hl\=ja

play-core-native-sdk-1.15.4.zip

で、16kbyte alignment​に対応したようです。SDK36のllvm-readobj --segmentsで

Alignment: 16384

が返ってくるので間違いないかと思います。対応促して申し訳ございません。

(7月に落としたものは確かに未対応だったのですが)​

GooglePADプラグインに適用してInstallBuildを作成し、ゲームのパッケージ作成して動作の確認まで終えておりますが、問題ないようです。

(fast-followで確認)​

​引き続き、NDKの対応で更新がありましたらお知らせ頂けたら幸いです。

よろしくお願いいたします。​