使用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,我找不到这个符号。
我的项目应该包括什么让这个工作?
答
静态库内的函数在调用SecureZeroMemory
时也被标记为inline
。通过删除inline
关键字,问题就消失了。我认为这与RtlSecureZeroMemory
被注释为extern inline __attribute__((__gnu_inline__))
并且我的函数也是内联的事实有关。
'RtlSecureZeroMemory'不起作用,但在'winnt.h'中定义了宏。 – RbMm
我真的很困惑。我的库的DLL版本包含'SecureZeroMemory'的代码,因为它是内联的。在这种情况下,静态库应该如此。这可能是MinGW中的一个错误吗? – MarkP
再次 - **这是宏**是否包含(间接)'winnt.h'?并在你的'winnt.h''RtlSecureZeroMemory'符号中进行搜索 - 'RtlSecureZeroMemory的实现是内联提供的,并且可以在任何版本的Windows上使用(参见WinNT.h)。' – RbMm