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

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

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

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

OS

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

MacOS(OSX)

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

コンパイラ

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

Q&A

解決済

1回答

910閲覧

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

beginner_4792

総合スコア10

GCC

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

OS

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

MacOS(OSX)

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

コンパイラ

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

0グッド

0クリップ

投稿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)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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

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

回答1

0

自己解決

https://qiita.com/yamoridon/items/4905765cc6e4f320c9b5

このページを見てやり直したらビルドできました。

投稿2022/08/14 01:05

beginner_4792

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問