Linker 如何将对象文件链接到UEFI DXE/EFI驱动程序?

Linker 如何将对象文件链接到UEFI DXE/EFI驱动程序?,linker,.obj,uefi,object-files,edk2,Linker,.obj,Uefi,Object Files,Edk2,我正在构建一个UEFI DXE/EFI(UDK2018)驱动程序(在Windows上,使用VS2017),需要将现有对象(.obj)文件链接到该驱动程序中。我相当确定这应该从INF文件内部完成,但我在EDK2文档中没有看到任何关于对象文件包含的具体内容。我确实发现以下两个例子可供参考: 但是,即使将它们作为参考(我认为这是可行的),我也无法找到正确的方法来配置INF文件,以获取对象_文件.lst以包含.obj。(实际错误当然是一个未解决的外部错误。--我已验证,如果我手动将.obj文件添加到

我正在构建一个UEFI DXE/EFI(UDK2018)驱动程序(在Windows上,使用VS2017),需要将现有对象(
.obj
)文件链接到该驱动程序中。我相当确定这应该从INF文件内部完成,但我在EDK2文档中没有看到任何关于对象文件包含的具体内容。我确实发现以下两个例子可供参考:

但是,即使将它们作为参考(我认为这是可行的),我也无法找到正确的方法来配置INF文件,以获取
对象_文件.lst
以包含
.obj
。(实际错误当然是一个未解决的外部错误。--我已验证,如果我手动将
.obj
文件添加到
对象_文件.lst
,则
.efi
驱动程序的链接成功。)

没有
.obj
,我的INF如下所示:

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = SampleDxe
  FILE_GUID                      = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  MODULE_TYPE                    = DXE_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = SampleDxe_Main

[Sources]
  SampleDXE.c
  SampleDXE.h
  SampleProtocol.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec

[LibraryClasses]
  UefiBootServicesTableLib
  MemoryAllocationLib
  UefiDriverEntryPoint
  BaseMemoryLib
  UefiLib
  DebugLib
  BaseLib
  PcdLib
  DevicePathLib

[Depex]
  TRUE
我尝试在
[Sources]
[Packages]
部分之间插入以下部分,但没有成功:

[Binaries]
  LIB|path/to/my/file.obj|*|MSFT
.obj
与源文件一起放置)

我还将INF_版本修改为更高版本(0x0001001A、1.25等),尽管不是上述各节的所有组合

我还相信我可以创建一个中间的
.lib
文件,但如果我要这样做,还有其他更直接的选项在我的例子中是有意义的。独立对象文件的使用将更可取、更简单,并且与更大项目的其他部分更合作,上面的示例似乎表明这是可能的


有谁能告诉我如何将一个预先存在的对象文件链接到DXE/EFI(大概是通过将其添加到
object\u files.lst
)中?

好吧,我应该想,经过几天的尝试,答案会在我发布这个问题后立即出现……确实如此

我首先被引导到默认的
EDK\Conf\build\u rule.txt
文件,在那里我找到了
.obj
文件(以及
.o
文件)的生成规则!这看起来很像一个普通副本(实际上,将其添加到与
.c
/
.cpp
/
.asm
/etc.files的输出相同的列表中),因此建议尝试将
.obj
文件放入
[源代码]
部分。我在其他任何地方都没有见过这种情况,所以我尝试了一下,果然奏效了:

[Sources]
  SampleDXE.c
  SampleDXE.h
  SampleProtocol.h
  path/to/my/file.obj
[Binaries]
  LIB|path/to/my/file.obj|*|MSFT
[Binaries.X64]
  LIB|path/to/my/file.obj|*|MSFT
[Binaries]
  LIB|path/to/my/file.obj|*
[Binaries.X64]
  LIB|path/to/my/file.obj|*
[Binaries]
  LIB|path/to/my/file.obj
[Binaries.X64]
  LIB|path/to/my/file.obj
[Binaries]
  LIB|file.obj|*|MSFT
[Binaries.X64]
  LIB|file.obj|*|MSFT
[Binaries]
  LIB|file.obj|*
[Binaries.X64]
  LIB|file.obj|*
[Binaries]
  LIB|file.obj
[Binaries.X64]
  LIB|file.obj
[Sources]
  SampleDXE.c
  SampleDXE.h
  SampleProtocol.h
  path/to/my/file.obj