1

最近、UEFI (提案されている BIOS の代替品) について学びながら、EDK2 を使用してコーディングとコンパイルを試みました。アイデアは、UEFI シェルに入ったときに起動できる .EFI バイナリを生成することでした。私はそうすることができました。完璧に!

現在、私のコードには純粋な C スタイルが含まれています (基本的に、クラス、コンストラクター、バーチャル、STL コンテナー クラスなどの C++ 機能がありません)。STL コンテナー クラス (文字列、ベクター、ハッシュ マップなど) を使用して、UEFI 用に .EFI をコンパイルして実行できるかどうか疑問に思っていました。

少し調べたところ、落胆がたくさんありました!基本的に、私が集めたものは次のとおりです。

  1. UEFI は C と密接に結びついています。オープンソースの実装は C++ をサポートしていません。
  2. new および delete はサポートされていません。
  3. vtable の生成はコンパイラに依存するため、生成されたコードは移植性がありません

さらに、このサイトから学ぶべきことがたくさんありました: UEFI プログラミング

しかし、残念ながら私は混乱したままでした!

私の質問は、コードで STL クラス (std::string/std::vector/std::map) を使用し、UEFI 環境用の EDK2 を使用してコンパイルできるかということです。

誰かが探すべき解決策/方向性を教えていただければ幸いです。現在、私が取り組んでいる唯一のオプションは、ここにあるコンテナーの C 実装の 1 つです: UTHash 実装

回避策はありますか?

4

2 に答える 2

1

ポイント2は大きな問題ではないはずです。newおよびへの依存deleteは、主にstd::allocator、各コンテナ テンプレートのデフォルト引数である を介して行われます。しかし、それはデフォルトにすぎません。独自のアロケーター (UEFI で利用可能なメモリ割り当てを使用) を提供すると、それが機能する可能性が高くなります。

とにかく、STL 実装で vtables を使用する可能性は低いため、3 も大した問題ではありません。ただし、<iostream>別件になります。

于 2014-03-04T13:34:47.330 に答える