使用MinGW在静态库中未解析RtlSecureZeroMemory

问题描述:

我有一个使用MinGW编译的C静态库。生成一个.a文件,然后在Visual Studio项目中使用该文件。静态库在内部使用SecureZeroMemory。 Visual Studio项目遇到一个问题,它无法解析RtlSecureZeroMemory,这是SecureZeroMemory宏的功能。使用MinGW在静态库中未解析RtlSecureZeroMemory

LNK2019解析的外部符号RtlSecureZeroMemory在功能static_lib_memset_func

我本来以为这个功能会一直在Visual Studio中默认添加(前。kernel32.dll)库的一个引用。但是,使用依赖walker,我找不到这个符号。

我的项目应该包括什么让这个工作?

+0

'RtlSecureZeroMemory'不起作用,但在'winnt.h'中定义了宏。 – RbMm

+0

我真的很困惑。我的库的DLL版本包含'SecureZeroMemory'的代码,因为它是内联的。在这种情况下,静态库应该如此。这可能是MinGW中的一个错误吗? – MarkP

+0

再次 - **这是宏**是否包含(间接)'winnt.h'?并在你的'winnt.h''RtlSecureZeroMemory'符号中进行搜索 - 'RtlSecureZeroMemory的实现是内联提供的,并且可以在任何版本的Windows上使用(参见WinNT.h)。' – RbMm

静态库内的函数在调用SecureZeroMemory时也被标记为inline。通过删除inline关键字,问题就消失了。我认为这与RtlSecureZeroMemory被注释为extern inline __attribute__((__gnu_inline__))并且我的函数也是内联的事实有关。