質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コンパイラ

コンパイラは、プログラミング言語で記述したソースコードを、コンピュータの実行形式であるオブジェクトコードに変換するプログラムです。

解決済

EDK2の環境をMac上で実現したいです

beginner_4792
beginner_4792

総合スコア10

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コンパイラ

コンパイラは、プログラミング言語で記述したソースコードを、コンピュータの実行形式であるオブジェクトコードに変換するプログラムです。

1回答

0リアクション

0クリップ

174閲覧

投稿2022/08/13 09:20

前提

「 ゼロからのOS自作入門」という書籍を見てEDK2が必要となったので環境構築しようとしています。そのそインストールの過程でEmulatorPkgをビルドしようとしたところ以下に示すエラーメッセージが出て解決できなくなってしまったので質問させていただきます。

ターミナルで実行した内容

ターミナル上でgitを用いてedk2をカレントディレクトリに配置して、edk2内でedksetup.shを実行してEmulatorPkgを以下のコマンドでビルドしようとしました。

$ git clone https://github.com/tianocore/edk2.git $ cd edk2 $ git submodule update --init $ source edksetup.sh $ cd EmulatorPkg $ ./build.sh

発生している問題・エラーメッセージ

上で示したコマンドをターミナル上で実行すると以下のようなコマンドが出てしまいました。

gcc -c -I .. -I ../Include/Common -I ../Include/ -I ../Include/IndustryStandard -I ../Common/ -I .. -I . -I ../Include/X64/ -MD -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-deprecated-declarations -Wno-self-assign -Wno-unused-result -nostdlib -g -O2 VolInfo.c -o VolInfo.o gcc -o ../bin/VolInfo VolInfo.o -L../libs -lCommon /Library/Developer/CommandLineTools/usr/bin/make -C DevicePath gcc -c -I .. -I ../Include/Common -I ../Include/ -I ../Include/IndustryStandard -I ../Common/ -I .. -I . -I ../Include/X64/ -MD -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-deprecated-declarations -Wno-self-assign -Wno-unused-result -nostdlib -g -O2 -Wno-error=stringop-overflow DevicePath.c -o DevicePath.o error: unknown warning option '-Werror=stringop-overflow'; did you mean '-Werror=shift-overflow'? [-Werror,-Wunknown-warning-option] make[2]: *** [DevicePath.o] Error 1 make[1]: *** [DevicePath] Error 2 make: *** [Source/C] Error 2

このエラーメッセージはコンパイラのバージョンが悪いということでしょうか。

補足情報(FW/ツールのバージョンなど)

使っているコンパイラなどのバージョンを以下に記しました。

macOS Monterey: バージョン12.5
gcc: version 12.1.0 (Homebrew GCC 12.1.0)

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

hoshi-takanori

2022/08/13 09:37

gcc --version を実行したら何が表示されますか? (Homebrew で入れたものは gcc-12 とかになってるはず…。)
beginner_4792

2022/08/13 10:01

ご回答ありがとうございます。 gcc-12 (Homebrew GCC 12.1.0) 12.1.0 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gcc --version の結果はこんな感じでした。一応、Homebrewでインストールして~/.zshrcファイルでalias='gcc-12'と設定しました。
hoshi-takanori

2022/08/13 10:32

あ、そうか。alias はシェルの機能なので、make では無効なはずです。
beginner_4792

2022/08/13 11:08

そうなんですか。ちなみに上のエラーのerror: unknown warning option '-Werror=stringop-overflow'; did you mean '-Werror=shift-overflow'?の解決方法わかりますか?
hoshi-takanori

2022/08/13 11:50

macOS では gcc という名前で GNU CC ではなく Apple clang というコンパイラが入ってて、細かいオプションが違うのだと思います。make では alias は効かないので、CC=gcc-12 make とかシンボリックリンクとかを使う必要があるかと。
beginner_4792

2022/08/13 13:20

シンボリックリンクを使ってまたビルドしたら以下のようなエラーが出てしまいました。 cp -p -f /Users/[username]/workplace/edk2/Build/EmulatorX64/DEBUG_XCODE5/X64/MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei/OUTPUT/StatusCodeHandlerPei.efi /Users/[username]/workplace/edk2/Build/EmulatorX64/DEBUG_XCODE5/X64/StatusCodeHandlerPei.efi /Users/[username]/workplace/edk2/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c:573:21: error: variable 'Private' set but not used [-Werror,-Wunused-but-set-variable] EMU_SNP_PRIVATE *Private; ^ /Users/[username]/workplace/edk2/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c:603:21: error: variable 'Private' set but not used [-Werror,-Wunused-but-set-variable] EMU_SNP_PRIVATE *Private; ^ /Users/[username]/workplace/edk2/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c:639:21: error: variable 'Private' set but not used [-Werror,-Wunused-but-set-variable] EMU_SNP_PRIVATE *Private; ^ /Users/[username]/workplace/edk2/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c:675:21: error: variable 'Private' set but not used [-Werror,-Wunused-but-set-variable] EMU_SNP_PRIVATE *Private; ^ /Users/[username]/workplace/edk2/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c:711:21: error: variable 'Private' set but not used [-Werror,-Wunused-but-set-variable] EMU_SNP_PRIVATE *Private; ^ /Users/[username]/workplace/edk2/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c:750:21: error: variable 'Private' set but not used [-Werror,-Wunused-but-set-variable] EMU_SNP_PRIVATE *Private; ^ cp -p -f /Users/[username]/workplace/edk2/Build/EmulatorX64/DEBUG_XCODE5/X64/MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei/DEBUG/*.map /Users/[username]/workplace/edk2/Build/EmulatorX64/DEBUG_XCODE5/X64/MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei/OUTPUT 6 errors generated. test -f /Users/[username]/workplace/edk2/Build/EmulatorX64/DEBUG_XCODE5/X64/MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei/OUTPUT/StatusCodeHandlerPei.map && cp -p -f /Users/[username]/workplace/edk2/Build/EmulatorX64/DEBUG_XCODE5/X64/MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei/OUTPUT/StatusCodeHandlerPei.map /Users/[username]/workplace/edk2/Build/EmulatorX64/DEBUG_XCODE5/FV/Ffs/9D225237-FA01-464C-A949-BAABC02D31D0StatusCodeHandlerPei/9D225237-FA01-464C-A949-BAABC02D31D0.map make: *** [/Users/[username]/workplace/edk2/Build/EmulatorX64/DEBUG_XCODE5/X64/EmulatorPkg/Unix/Host/Host/OUTPUT/BerkeleyPacketFilter.obj] Error 1 build.py... : error 7000: Failed to execute command make tbuild [/Users/[username]/workplace/edk2/Build/EmulatorX64/DEBUG_XCODE5/X64/EmulatorPkg/Unix/Host/Host] build.py... : error F002: Failed to build module /Users/[username]/workplace/edk2/EmulatorPkg/Unix/Host/Host.inf [X64, XCODE5, DEBUG] - Failed - Build end time: 22:15:04, Aug.13 2022 Build total time: 00:01:02 このエラーの原因はなんでしょうか。
hoshi-takanori

2022/08/13 18:02

error: variable 'Private' set but not used Private という変数に値がセットされてるけど、使われてません。 なぜそんなエラーが出るかは、ソースを読まないと分かりません。
beginner_4792

2022/08/13 23:21

573行目付近のerror: variable 'Private' set but not usedを抜き出してきましたが下のような感じでした。 EFI_STATUS EmuSnpReceiveFilters ( IN EMU_SNP_PROTOCOL *This, IN UINT32 Enable, IN UINT32 Disable, IN BOOLEAN ResetMCastFilter, IN UINTN MCastFilterCnt OPTIONAL, IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL ) { EMU_SNP_PRIVATE *Private; Private = EMU_SNP_PRIVATE_DATA_FROM_THIS (This); // For now, just succeed... return EFI_SUCCESS; } 確かにPrivate変数は参照されていないですがEDK2をgitでcloneしたプログラムであって自分で書いたプログラムではないです。こんな場合でも治さなければならないのでしょうか。
hoshi-takanori

2022/08/13 23:44

そのコード自体は本来エラーではないのですが、ビルドスクリプトが gcc を -Werror -Wno-unused-result というオプション付きで起動してるためにエラーになってます。何でそうなってるかは知りませんが。 > こんな場合でも治さなければならないのでしょうか。 あなたがそのコードを使いたいなら、何とかするしかないでしょうね…。
beginner_4792

2022/08/14 01:05

ご回答の方、ありがとうございました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コンパイラ

コンパイラは、プログラミング言語で記述したソースコードを、コンピュータの実行形式であるオブジェクトコードに変換するプログラムです。