Closed SmileLabMYS closed 2 years ago
はじめまして。報告ありがとうございます。 対処は、おそらく2点あります。私はMacに詳しくないので的を外しているかもですが、ヒントにして追ってみてください。
ターミナルをRosettaを利用して開いてmakeしてください。x86_64としてビルドできると思います。 M1環境でそのままmakeすると、arm64版になってしまうので、そのエラーが出ているのだと思います。 参考:https://support.apple.com/ja-jp/HT211861 (cmakeのオプションで変更できるかもですが、あまり自信ありません。。)
まずはじめに、、もし1の手順でプロジェクトのビルドが成功すれば、そのまま動くかもしれません。
この問題はおそらくVRM4Uとは関係なく、MacのC++プロジェクト設定によるものと思います。 エンジンごとビルドする場合は、ShaderCompileWorkerのみ手動ビルドが必要な場合があるようです。…が、ランチャ起動のUE4でもこの手順が必要なのかは いまいち不明です。 プロジェクトが起動しない場合は、試しに手動ビルドしてみてください。ビルド方法はいくつかあるようです。 参考:https://answers.unrealengine.com/questions/364089/unreal-411-source-custom-build-fails-to-launch-on.html
不明点あれば お気軽にどうぞ。
返信ありがとうございます。 1 は解決して、2 が調査中です。
- assimpをx86_64 でビルドする
CMake, ターミナルともに Rosetta を使用して開けば、警告は表示されなくなりました。 ターミナルのみ Rosetta で開いた場合は、同様の警告が表示されていましたが、 CMake も Rosetta で開くことで、警告は表示されなくなりました。
ld: warning: ignoring file /Users/{User}/Documents/Unreal Projects/VRM4UTest/Plugins/VRM4U/ThirdParty/assimp/lib/Mac/libassimp.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
- ShaderCompileWorkerを手動ビルドする
ターミナルで ShaderCompileWorker を手動ビルドしてみましたが、 依然として「ルールアセンブリ 'UE4Rules.dll' にターゲット 'ShaderCompileWorker' のターゲットルールファイルが見つからない」というエラーが出てる状態です。 UE4Rules.dll が作成される過程に問題がある気もしていますが、まだ分かっていません。
ターミナルで下記を実行する。
% cd /Users/Shared/Epic\ Games/UE_4.27/
% ./Engine/Build/BatchFiles/Mac/Build.sh ShaderCompileWorker Mac Development -verbose
[Rosettaを使用して開く] = ON, OFF 共に、 「ルールアセンブリ 'UE4Rules.dll' にターゲット 'ShaderCompileWorker' のターゲットルールファイルが見つからない」というエラーが出力される。
Running system mono/msbuild, version: Mono JIT compiler version 6.12.0.140 (2020-02/51d876a041e Thu Apr 29 10:44:55 EDT 2021)
Running Engine/Binaries/DotNET/UnrealBuildTool.exe ShaderCompileWorker Mac Development -verbose
VERBOSE: Registering build platform: UnrealBuildTool.MacPlatformFactory
UnrealBuildTool.MacPlatformSDK using manually installed SDK
VERBOSE: Registering build platform: Mac - buildable: True
VERBOSE: Registering build platform: UnrealBuildTool.TVOSPlatformFactory
VERBOSE: Registering build platform: UnrealBuildTool.AndroidPlatformFactory
UnrealBuildTool.AndroidPlatformSDK has no valid SDK
VERBOSE: Registering build platform: Android - buildable: False
VERBOSE: Registering build platform: UnrealBuildTool.HoloLensPlatformFactory
VERBOSE: Registering build platform: UnrealBuildTool.IOSPlatformFactory
UnrealBuildTool.IOSPlatformSDK using manually installed SDK
VERBOSE: Registering build platform: IOS - buildable: True
VERBOSE: Registering build platform: UnrealBuildTool.LinuxPlatformFactory
VERBOSE: Registering build platform: UnrealBuildTool.LuminPlatformFactory
VERBOSE: Registering build platform: UnrealBuildTool.WindowsPlatformFactory
Command line: "/Users/Shared/Epic Games/UE_4.27/Engine/Binaries/DotNET/UnrealBuildTool.exe" ShaderCompileWorker Mac Development -verbose
Creating makefile for ShaderCompileWorker (no existing makefile)
ERROR: Couldn't find target rules file for target 'ShaderCompileWorker' in rules assembly 'UE4Rules, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
Location: /Users/Shared/Epic Games/UE_4.27/Engine/Intermediate/Build/BuildRules/UE4Rules.dll
Target rules found:
BuildException: Couldn't find target rules file for target 'ShaderCompileWorker' in rules assembly 'UE4Rules, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
Location: /Users/Shared/Epic Games/UE_4.27/Engine/Intermediate/Build/BuildRules/UE4Rules.dll
Target rules found:
at UnrealBuildTool.RulesAssembly.CreateTargetRules (System.String TargetName, UnrealBuildTool.UnrealTargetPlatform Platform, UnrealBuildTool.UnrealTargetConfiguration Configuration, System.String Architecture, Tools.DotNETCommon.FileReference ProjectFile, Tools.DotNETCommon.CommandLineArguments Arguments) [0x00103] in <d532141a9e4a466493d8ab7d63b86b72>:0
at UnrealBuildTool.RulesAssembly.CreateTargetRules (System.String TargetName, UnrealBuildTool.UnrealTargetPlatform Platform, UnrealBuildTool.UnrealTargetConfiguration Configuration, System.String Architecture, Tools.DotNETCommon.FileReference ProjectFile, Tools.DotNETCommon.CommandLineArguments Arguments) [0x00104] in <d532141a9e4a466493d8ab7d63b86b72>:0
at UnrealBuildTool.UEBuildTarget.Create (UnrealBuildTool.TargetDescriptor Descriptor, System.Boolean bSkipRulesCompile, System.Boolean bUsePrecompiled) [0x0006c] in <d532141a9e4a466493d8ab7d63b86b72>:0
at UnrealBuildTool.BuildMode.CreateMakefile (UnrealBuildTool.BuildConfiguration BuildConfiguration, UnrealBuildTool.TargetDescriptor TargetDescriptor, UnrealBuildTool.ISourceFileWorkingSet WorkingSet) [0x00106] in <d532141a9e4a466493d8ab7d63b86b72>:0
at UnrealBuildTool.BuildMode.Build (System.Collections.Generic.List`1[T] TargetDescriptors, UnrealBuildTool.BuildConfiguration BuildConfiguration, UnrealBuildTool.ISourceFileWorkingSet WorkingSet, UnrealBuildTool.BuildOptions Options, Tools.DotNETCommon.FileReference WriteOutdatedActionsFile, System.Boolean bSkipPreBuildTargets) [0x00012] in <d532141a9e4a466493d8ab7d63b86b72>:0
at UnrealBuildTool.BuildMode.Execute (Tools.DotNETCommon.CommandLineArguments Arguments) [0x0037d] in <d532141a9e4a466493d8ab7d63b86b72>:0
at UnrealBuildTool.UnrealBuildTool.Main (System.String[] ArgumentsArray) [0x002bb] in <d532141a9e4a466493d8ab7d63b86b72>:0
Timeline:
[ 0.000]
0.000
追加で報告いたします。
- ShaderCompileWorkerを手動ビルドする
GitHub から UE のソースコードを取得して検証してみたところ、 ShaderCompileWorker に関するエラーは消えましたが、 Xcode ビルドには失敗している状況です。
以前からログに出力さていたようなのですが、 下記の 検証手順 に記載の通り、
という警告が出ています。
警告1はソースコードの修正が必要と思われますので、ご確認いただけますでしょうか? 警告2もソースコードの修正が必要なものでしょうか?
下記に記載の手順を実行する。
起動した UE4Editor (4.27.2) でプロジェクトを作成する。
(VRM プラグインの追加など)
Xcode で {Project}.xcworkspace を開き、{Project}.uproject をビルドする。
下記のエラーは表示されないが、ビルドは失敗する。
ERROR: Couldn't find target rules file for target 'ShaderCompileWorker' in rules assembly 'UE4Rules, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
2つの警告がエラーの原因? 以前のログも確認したところ、同様の警告が出ていたので、本手順には無関係の警告だと思われる。 Build target VRM4UTest2_Build_2022-01-30T13-47-00.txt
警告1 : 'Skeleton' is deprecated
[1/65] Compile Module.VRM4U.cpp
In file included from /Users/{User}/Documents/Unreal Projects/VRM4UTest2/Plugins/VRM4U/Intermediate/Build/Mac/x86_64/UE4Editor/Development/VRM4ULoader/Module.VRM4ULoader.cpp:2:
/Users/{User}/Documents/Unreal Projects/VRM4UTest2/Plugins/VRM4U/Source/VRM4ULoader/Private/LoaderBPFunctionLibrary.cpp:935:27: warning: 'Skeleton' is deprecated: Please do not access this member directly; use USkeletalMesh::GetSkeleton() or USkeletalMesh::SetSkeleton(). Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile. [-Wdeprecated-declarations]
for (auto &t : srcMesh->Skeleton->Sockets) {
^
/Users/{User}/Downloads/UnrealEngine-release/Engine/Source/Runtime/Engine/Classes/Engine/SkeletalMesh.h:627:2: note: 'Skeleton' has been explicitly marked deprecated here
UE_DEPRECATED(4.27, "Please do not access this member directly; use USkeletalMesh::GetSkeleton() or USkeletalMesh::SetSkeleton().")
^
/Users/{User}/Downloads/UnrealEngine-release/Engine/Source/Runtime/Core/Public/Misc/CoreMiscDefines.h:234:43: note: expanded from macro 'UE_DEPRECATED'
#define UE_DEPRECATED(Version, Message) [[deprecated(Message " Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.")]]
^
警告2 : dylib was built for newer macOS version (12.0) than being linked (10.14)
[17/65] Link UE4Editor-VRM4ULoader.dylib
ld: warning: dylib (/Users/{User}/Documents/Unreal Projects/VRM4UTest2/Plugins/VRM4U/ThirdParty/assimp/lib/Mac/libassimp.dylib) was built for newer macOS version (12.0) than being linked (10.14)
Undefined symbols for architecture x86_64:
"aiMaterial::GetName() const", referenced from:
VRMConverter::ConvertTextureAndMaterial(UVrmAssetListObject*, aiScene const*) in Module.VRM4ULoader.cpp.o
VRMConverter::ConvertModel(UVrmAssetListObject*, aiScene const*) in Module.VRM4ULoader.cpp.o
ld: symbol(s) not found for architecture x86_64
色々情報ありがとうございます。 手元のMac環境でもビルドエラーになっていました。 警告の修正 &ライブラリをstatic link版に切り替えましたので、以下の手順で追ってみてください。手元では これでVRMインポートまで動作できました。
最新のVRM4Uソース、assimpソースを取得する
cmakeで、BUILD_SHARED_LIBS を OFF にしてmakeする
makeで出力された assimp\build2\lib\libassimp.a を VRM4U\ThirdParty\assimp\lib\Mac\libassimp.a にコピー
ランチャーからプロジェクトファイルを指定して起動。ダイアログからビルドすると、そのまま起動する。はず。
環境によるかもですが、手元ではXcodeでxcworkspaceを使ったビルドがうまく動かず、またcleanするとエディタごと起動不可になってしまい、UE4再インストールになってしまうようでした。 もしcleanしたい場合は VRM4U以下の Intermediate と Binariesを削除すればOKです。
うまく動作するようであれば ドキュメントを更新しておきます。
深夜にも関わらず、返信ありがとうございます。
VRM4U 有効後に、Xcode ビルドなしでプロジェクトを再起動できました! vrm ファイルのインポートも成功です!
検証手順 は下記の通りです。 本件は解決しましたので、クローズいたします。
ご対応ありがとうございました!!!
[1] CMake 3.22.2
[2] ターミナル 2.12
[3] Unreal Editor 4.27.2
Harube さん、初めまして。 Smile と申します。
下記などを参考に UE4.27.2 (macOS) で VRM4U プラグインを使おうとしたのですが、途中で問題が発生しました。 https://ruyo.github.io/VRM4U/03_mac/
ログや再現手順を記載しましたので、解決策をご教示いただけますでしょうか?
Describe the bug
Xcode で {Project}.xcworkspace をビルドすると、下記のエラーが発生し、ビルドに失敗します。
Screenshots, log
Build target VRM4UTest_Build_2022-01-29T11-52-17.txt
275行目に当該のエラーが出力されています。
また、エラーに影響しているか不明ですが、282行目に下記の警告が出力されています。
UnrealEngine Version:
Additional context : Other Softwares Version
その他の使用しているソフトなどのバージョンは、下記の通りです。
Additional context : Steps to reproduce
再現手順は、下記の通りです。
[1] assimp
[2] UE
[3] Xcode
Xcode で {Project}/{Project}.xcworkspace を開く。
Games > {Project} に {Project}/Plugins ディレクトリをグループとして追加する。
Product > Build する。
ビルドエラーが発生し、ビルドが失敗する。
Additional context : References