私はUEFIシェルについて研究するために1つのチュートリアルに従いました問題は私がコンパイルしようとすると私が理解していないこれを取得することです
ERROR:`hello.c: In function ‘efi_main’:
hello.c:8:10: warning: passing argument 1 of ‘Print’ from incompatible pointer type [-Wincompatible-pointer-types]
Print(L"Hi,,,");
^~~~~~~~
In file included from hello.c:2:0:
/usr/local/include/efi/efilib.h:503:1: note: expected ‘const CHAR16 * {aka const short unsigned int *}’ but argument is of type ‘int *’
Print (
^~~~~
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
/tmp/ccGlbBgD.o: In function `efi_main':
hello.c:(.text+0x1f): undefined reference to `InitializeLib'
hello.c:(.text+0x30): undefined reference to `Print'
collect2: error: ld returned 1 exit status`
チュートリアルURL:「https://www.rodsbooks.com/efi-programming/hello.html」
ちなみに私はCプログラミングは初めてです
編集: gccバージョン7.4.0および5.5.0を試してプログラムをコンパイルし、さらに「sudo apt-get install gnu-efi」を介してgnu-efiをインストールし、チュートリアルからコードに変更を加えました。コードは次のとおりです。
#include <efi/efi.h>
#include <efi/efilib.h>
EFI_STATUS
EFIAPI
efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) {
InitializeLib(ImageHandle, SystemTable);
Print(L"Hi,,,");
return EFI_SUCCESS;
}
私が試したコマンド
GCC v7.4.0gcc hello.c -I /usr/include/efi/x86_64
GCC v5.5.0gcc-5 hello.c -I /usr/include/efi/x86_64
このエラーは、efiプログラムのコンパイル中に必要だったコンパイラオプションを使用しなかったために発生します。表示されるエラーは、-fshort-wchar
オプションがないために発生します。未定義の参照は、efiライブラリに対してリンクしていないことに起因します。undefined reference to 'main'
使用していないから来て-shared
、コンパイルオプションを。
リンクしたサイトには、プログラムのコンパイル方法に関するmakefileの例が示されています。このサイトには、プログラムのコンパイルに使用されるいくつかのコンパイルフラグについての簡単な説明もあります。最も簡単なのは、そのmakefileを使用することです。それに従ってefiプログラムをコンパイルします。
もう1つの方法は、makefileからコンパイルフラグとリンカーフラグを手動で抽出し、適切なコンパイルオプションを使用してコンパイルすることです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加