首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包括edk2 2-libc在内的efi shell应用程序。

包括edk2 2-libc在内的efi shell应用程序。
EN

Stack Overflow用户
提问于 2021-09-30 07:59:10
回答 1查看 446关注 0票数 0

如果我想在我的https://github.com/tianocore/edk2-libc应用程序中包含stdio并使用printf,那么如何添加对edk2的支持呢?我遵循StdLib/Readme.txt,并且能够在AppPkg中成功地构建示例,但是,当我试图将StdLib添加到我的项目中时,会得到如下错误:

代码语言:javascript
复制
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版本。

EN

回答 1

Stack Overflow用户

发布于 2022-02-21 07:56:32

我使用以下配置实现了AppPkg的Hello。

Hello.inf

代码语言:javascript
复制
[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
  DevConsole

Hello.c

代码语言:javascript
复制
#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中所做的那样

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69388394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档