inf文件中需要[BuildOptions]块
[BuildOptions]
*_*_X64_DLINK_FLAGS = /LIBPATH:"$(WORKSPACE)\testlib\Library"
*_*_*_DLINK_FLAGS = EfiMyLib.lib /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /ALIGN:4096 /FILEALIGN:4096 /SUBSYSTEM:CONSOLE
第一行"$(WORKSPACE)\testlib\Library"是相对于workspace的路径:那个库所在的文件夹
第二行EfiMyLib.lib是名库的名字
头文件中要有
#define EFI_XXXX_PROTOCOL_GUID \
{0x0a8c2120, 0xeebb, 0x1111, {0xae, 0x85, 0x90, 0x2b, 0x34, 0x00, 0xbe, 0x9d}}
和
extern EFI_GUID gEfiXXXXProtocolGuid;
然后再dec文件中
gEfiXXXXProtocolGuid = {0x0a8c2120, 0xeebb, 0x1111, {0xae, 0x85, 0x90, 0x2b, 0x34, 0x00, 0xbe, 0x9d}}
如果遇到无法解析的外部符号:__chkstk,应该是参数传递的时候,本来穿的指针就可以,然后定义了结构体变量,再取地址,导致栈容量不够,所以使用lib时要注意参数中指针的传递方式:到底是定义结构体变量,传递变量地址。还是定义结构体指针,传递指针。也有可能是各种结构体变量加起来太大了,所以如果定义结构体变量可以用allocate分配。