uchan-nos / mikanos-build

Build and run scripts for MikanOS
Apache License 2.0
307 stars 79 forks source link

MikanOSのビルド中にエラー #19

Open inadera-rantaro opened 3 years ago

inadera-rantaro commented 3 years ago

MikanOSのビルド中にエラーが発生しました。 発生状況は以下の通りです。

image

環境はWSL2+Ubuntu20.04

エラーの該当箇所をコメントアウトした結果、ビルド、実行ともにうまくいきました。 ただ、なぜエラーが発生したのか、コメントアウトしたままでよいのかが分かりません。

分かる方いらっしゃいましたら教えてください。

uchan-nos commented 2 years ago

ちょっと放置してしまっていたのですが、軽く調査してみました。 結論としては、おそらくMikanOSがEDK2のヘッダファイルを無理矢理インクルードして利用しているのが原因だと思われます。

2021年7月にEDK2に導入された次の変更がビルドエラーを引き起こしています。 https://github.com/tianocore/edk2/commit/ad1009ec626bea7a718d595f98f0ad49a16c6e5b

clang++の標準設定ではワイド文字 L'A' は4バイト単位となるようです。 したがって L"A" はヌル文字を含めて 8 バイトとなります。 https://wandbox.org/permlink/AarRHBZWG9XhndIQ

clang++のオプションに -fshort-wchar を渡すと、上記のビルドエラーを防げる可能性があります。 https://wandbox.org/permlink/y4IaeXoPuTts6wha

mikanos-buildで配布しているAnsibleファイルでは、EDK2の古いバージョン(https://github.com/tianocore/edk2/commit/38c8be123aced4cc8ad5c7e0da9121a181b94251)を指定して使うようにしており、この問題が表面化していません

将来的に問題になるので、直すとすると、MikanOSがEDK2のヘッダファイルに依存しないようにするのが根本的な修正だろうと思います。

もっと楽にするなら、clang++に -fshort-wchar を渡すようにする方法があり得ます。 MikanOSでは今のところワイド文字を使っていないので、この方法でも当面は問題がないと思います。