【发布时间】:2017-02-06 19:26:15
【问题描述】:
我有一个使用 MinGW 编译的 C 静态库。生成一个.a 文件,然后在 Visual Studio 项目中使用。静态库在内部使用SecureZeroMemory。 Visual Studio 项目遇到无法解析RtlSecureZeroMemory 的问题,这是SecureZeroMemory 宏背后的函数。
函数 static_lib_memset_func 中引用的 LNK2019 未解析的外部符号 RtlSecureZeroMemory
我原以为这个函数会在 Visual Studio 默认添加的库之一中(例如kernel32.dll)。但是,使用依赖walker,我找不到这个符号。
我的项目应该包括哪些内容才能使其正常工作?
【问题讨论】:
-
RtlSecureZeroMemory不是函数,而是在winnt.h中定义的宏 -
我真的很困惑。我的库的 DLL 版本包含
SecureZeroMemory的代码,因为它是内联的。在这种情况下,静态库也应该如此。这可能是 MinGW 中的错误吗? -
再次 - 这是宏你是否包括(间接)
winnt.h?并在您的winnt.hRtlSecureZeroMemory符号中搜索 -The implementation of RtlSecureZeroMemory is provided inline and can be used on any version of Windows (see WinNT.h.) -
包含该标题,
windows.h也是如此。该库编译良好。使用库的 Visual Studio 项目导致错误。 -
啊哈!当使用 MinGW 编译库时,它引用
%MINGW%\include内的winnt.h而不是 Windows SDK 目录。两个标题有区别。 MinGW 有一个声明,但只有在提供某些宏时才内联正文。
标签: c visual-studio visual-c++ static-linking