我链接到ntdll.lib以使用ZwQueryInformationProcess,并且正在使用多线程运行时库。

ntdll似乎定义了一些crt函数。因此,当我针对它进行链接并且还使用运行时库时,会出现链接器错误。

我可以强制链接器使用crt函数并忽略ntdll符号以摆脱该错误吗?或以其他方式解决此错误。

我知道ZwQueryInformationProcess的文档建议动态加载,但是它在我的主项目也链接到的静态lib中使用,并且已经运行了很长时间,因此我不希望更改它。

谢谢。

我在其他站点上找到了一些有关此问题的讨论,例如:http://www.codeguru.com/forum/archive/index.php/t-414274.html,但没有看到任何似乎可以提供好的解决方案的东西。提到了更改链接顺序的内容,但是我看不到如何通过项目设置更改运行时库链接的顺序。

最佳答案

更改链接顺序似乎可以解决问题。要更改自动链接库的顺序,您需要通过添加到“忽略特定库”中来忽略它们,然后按照您希望它们链接的顺序将它们重新添加到“其他依赖项”中。错误消息是这样的:

1>libcmt.lib(wcstol.obj) : error LNK2005: _wcstoul already defined in ntdll.lib(ntdll.dll)

因此,我将libcmt.lib添加为忽略项,并将其放置在其他依赖项的开头。这产生了另一个错误,我按照相同的步骤进行操作。因此,项目属性最终看起来像这样(ntdll.lib在附加依赖项的末尾):

我还发现将/verbose:lib添加到链接器->命令行->附加选项很有用,这样您就可以准确地看到正在链接的库以及链接的顺序。

关于c++ - 错误LNK2005 : _sprintf already defined in ntdll. lib(ntdll.dll),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4794836/

10-09 17:15