最近在编写对于体积比较敏感的 UEFI Application,忽然发现生成的文件足有140KB。经过研究发现这是因为使用了 CLIB 导致的。为此特别进行了一下实验。
首先直接编译AppPkg 中的 Hello,得到的文件为 8K 大小

之后,修改代码在 INF 中引入CLIB
[Defines]
INF_VERSION = 0x00010006
BASE_NAME = Hello3
FILE_GUID = a912f198-2023-0314-b908-b757b806ec83
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 0.1
ENTRY_POINT = ShellCEntryLib
#
# VALID_ARCHITECTURES = IA32 X64
#
[Sources]
Hello3.c
[Packages]
MdePkg/MdePkg.dec
ShellPkg/ShellPkg.dec
[LibraryClasses]
UefiLib
ShellCEntryLib
LibC
C 代码只是修改了一下入口为 main函数:
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/ShellCEntryLib.h>
int
main (
IN int Argc,
IN char **Argv
)
{
Print(L"Hello there fellow Programmer.\n");
Print(L"Welcome to the world of EDK II.\n");
return(0);
}
重新编译,可以看到生成的问题就变成133KB 了。

所以,如果对UEFI Application 尺寸比较敏感,请避免使用 CLIB。