如果我想在我的https://github.com/tianocore/edk2-libc应用程序中包含stdio并使用printf,那么如何添加对edk2的支持呢?我遵循StdLib/Readme.txt,并且能够在AppPkg中成功地构建示例,但是,当我试图将StdLib添加到我的项目中时,会得到如下错误:
LibString.lib(Searching.obj) : error LNK2005: strspn already defined in LibString.lib(Searching.obj)
LibCtype.lib(CClass.obj) : error LNK2005: isspace already defined in LibCtype.lib(CClass.obj)
(...)
LibC.lib(Main.obj) : error LNK2001: unresolved external symbol main我确实将样板(包括StdLib/StdLib.inc)添加到我的dsc文件中,在inf中,我将StdLib.dec添加到包中,LibC和LibStdio添加到LibraryClasses中。我使用VS2017工具链进行编译,并使用edk2 2稳定的202108版本。
发布于 2022-02-21 07:56:32
我使用以下配置实现了AppPkg的Hello。
Hello.inf
[Defines]
INF_VERSION = 0x00010006
BASE_NAME = Hello
FILE_GUID = a912f198-7f0e-4803-b908-b757b806ec83
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 0.1
ENTRY_POINT = ShellCEntryLib
#
# VALID_ARCHITECTURES = IA32 X64
#
[Sources]
Hello.c
[Packages]
MdePkg/MdePkg.dec
ShellPkg/ShellPkg.dec
StdLib/StdLib.dec
[LibraryClasses]
UefiLib
ShellCEntryLib
BaseLib
BaseMemoryLib
MemoryAllocationLib
LibStdLib
LibStdio
LibString
DevConsoleHello.c
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/ShellCEntryLib.h>
#include <stdio.h>
int
main (
IN int Argc,
IN char **Argv
)
{
printf("Hello, world!\n");
return 0;
}我所理解的是,LibC中定义了ShellAppMain(),内部调用extern ()。因此,您需要在源代码中提供main()的定义,就像我在Hello.c中所做的那样
https://stackoverflow.com/questions/69388394
复制相似问题