闲来无事拉了最新的edk2,发现编译出错。
第一种是edk2原有的link错误
FilterLibNull.lib(RegisterFilterLibNull.obj) : error LNK2001: 无法解析的外部符号 __security_check_cookie
BaseLib.lib(SafeString.obj) : error LNK2001: 无法解析的外部符号 __security_check_cookie
BaseLib.lib(SafeString.obj) : error LNK2001: 无法解析的外部符号 __GSHandlerCheck
BaseLib.lib(SafeString.obj) : error LNK2001: 无法解析的外部符号 __security_cookie
除此之外可能还会遇到自己的
error LNK2001: 无法解析的外部符号 __chkstk
error LNK2001: 无法解析的外部符号 memset
最根本原因都是编译器选项导致的
这边附上微软的MSVC编译选项
在你的dsc中加上!include MdePkg/MdeLibs.dsc.inc解决第一种;
第二种麻烦一点,因为自己不想改动edk2源码,需要参照第一种的实现加一个Lib。
#include <Uefi.h>
VOID
__chkstk (
)
{
}
void *
memset (
void *,
int,
size_t
);
#pragma intrinsic(memset)
#pragma function(memset)
void *
memset (
void *s,
int c,
size_t n
)
{
unsigned char *d;
d = s;
while (n-- != 0) {
*d++ = (unsigned char)c;
}
return s;
}
注意点:inf的[BuildOptions]里加上
MSFT:*_*_*_CC_FLAGS = /GL-
dsc的[LibraryClasses]里加上
NULL|你的Lib的inf
大致就是这样,遇到其他问题再说,方法都大差不差的。

1万+

被折叠的 条评论
为什么被折叠?



