4

Visual Studio 2012 プロジェクトを使用して EDK2 SDK で UEFI ドライバーをビルドする方法についてアドバイスを求めています。UefiLib.lib を静的にリンクしようとしていますが、惨めに失敗しています。リンカーの下の追加の依存関係にライブラリを追加しました。

#include  <Uefi.h>
#include  <Library/UefiLib.h>

EFI_STATUS
EFIAPI
UefiMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
 Print((CHAR16 *)L"Welcome to the world of EDK II.\n");
 return EFI_SUCCESS;
}

エラーは

test.obj : error LNK2001: unresolved external symbol "unsigned __int64 __cdecl Print(unsigned short const *,...)" (?Print@@YA_KPEBGZZ)

DUMPBIN を使用して Print がライブラリに存在することを確認しましたが、エクスポートまたはインポートとしてではなく、アーカイブメンバーとして存在します。それが問題かどうかはわかりません。

4

1 に答える 1

4

UEFI ドライバーまたはアプリケーションを個別にビルドすることはできません。EDK2 ソース ツリー内でビルドする必要があります。EDK2 ソース ツリーには、EDK2 コンポーネントのコンパイルとリンクに必要な多数のヘッダー ファイルとライブラリが含まれています。EDK2 コンポーネントは EDK2 ビルド ツールを使用してビルドする必要があります。C コンパイラ/リンカーは EDK2 ビルド プロセスの 1 ステップにすぎません。コマンド ラインを使用してビルドを開始し、環境が適切に設定されていることを確認してから、開発するコンポーネントを Visual Studio に取り込んでみてください。

Visual Studio では、Makefile プロジェクトの作成から開始できます。これは、すべてのカスタム ビルド ステップを指定するために必要です。たとえば、[構成プロパティ] -> [NMake] -> [全般] -> [ビルド コマンド ライン] の下にあるプロジェクトのプロパティ ページに移動します。ビルド コマンド ラインに次のコードを入力します。ビルドしようとしている Hello アプリを含む AppPkg パッケージ全体をビルドできるようになります。

cd C:\src\edk2
call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86
call edksetup.bat
build.exe -p c:\src\edk2\AppPkg\AppPkg.dsc -t VS2012x86  -b DEBUG

Hello のみをビルドする場合は、AppPkg パッケージのビルドに使用される AppPkg.dsc ファイルをカスタマイズする必要があります。build.exe ユーティリティでより高度なコマンド ライン スイッチを使用して、ビルド プロセスをさらに微調整する方法があります。TianoCore.org で入手可能な EDK2 マニュアルを調べる必要があります。

上記の手順は、Visual Studio 内で UEFI アプリ/ドライバーの構築を開始するのに役立ちますが、強力な IntelliSense およびデバッグ機能のために Visual Studio を使用することをお勧めします。これを行うには、Nt32Pkg パッケージのビルドから開始する必要があります。これにより、Windows で EFI エミュレートされた環境が作成され、コードをステップ実行して、UEFI ドライバー/アプリを通常の Windows アプリケーションとしてデバッグできます。これを行うための Visual Studio プロジェクトのセットアップは、Phoenix Core Architect など、すべての作業を自動化する UEFI 開発専用の VS 拡張機能を使用しない限り、少し注意が必要です。ただし、手動で行うことは可能です。EDK2 ソースのファイル/フォルダー構造の一部またはすべてを手動で VS ソリューション エクスプローラーに取り込む必要があります。Nt32Pkg ビルドの結果は、Windows アプリケーション C:

于 2014-02-27T23:47:15.557 に答える