我正在使用gnu efi作为Visual Studio 2019项目。我的UEFI程序在实际硬件上按预期工作。下一步,我需要C功能,如">pow(…(";。当然,当使用efi时,所有这些功能都会被禁用。当我直接包含<math.h>我得到未解决的外部。。。错误。如果我启动了一个成功构建的无限制项目。
我问过它,有人建议我去下载EDK2 libc,但我不知道如何在我的项目中使用它,也不知道它是否适用于GNU-EFI。我不知道该怎么做才能使用C功能。如果有人告诉我该做什么,我会很高兴
这是移植到UEFI的libc。
这里没有提到的一种方法是"假装它,直到你做到了";策略
math.h的一种廉价而肮脏的方法是利用编译器可能对大多数函数都有内部函数的知识,只包装__builtin函数。
double __cdecl pow(double in, double p) {
return __builtin_pow(in, p);
}
这也可以用于memmov、memcpy、memcmp和其他一些。malloc可以通过包装BootServices->AllocatePool。您可以创建自己的include目录,将编译器指向它,然后在编译器要求时用触摸过的伪头填充它。令人惊讶的是,你可以通过谎言和诡计逃脱很多惩罚。
当然,你永远不会得到一个完整的libc,但只要仔细选择库,你仍然可以毫不费力地移植很多东西。我能够使用伪it策略从EASTL和反粒度几何中获得一堆C++代码