我正在链接ntdll.lib以使用ZwQueryInformationProcess,并且正在使用多线程运行时库。
ntdll似乎定义了一些crt函数。因此,当我链接到它并使用运行时库时,我会得到链接器错误。
是否可以强制链接器使用crt函数并忽略ntdll符号以消除错误?或者以某种方式解决这个错误。
我知道ZwQueryInformationProcess的文档建议使用动态加载,但它是在我的主项目也链接到的静态库中使用的,而且这在很长一段时间内一直运行良好,所以我不愿更改它。
谢谢。
我在其他网站上找到了一些关于这方面的讨论,例如:http://www.codeguru.com/forum/archive/index.php/t-414274.html,但还没有看到任何似乎能提供好解决方案的东西。有一些提到要更改链接顺序,但我看不到如何通过项目设置更改运行时库链接的顺序。
发布于 2011-01-26 00:09:47
改变链接顺序似乎可以解决这个问题。要更改自动链接库的顺序,您需要通过添加到“忽略特定库”来忽略它们,然后按照您希望它们链接的顺序将它们重新添加到“附加依赖项”中。错误消息如下:
1>libcmt.lib(wcstol.obj) : error LNK2005: _wcstoul already defined in ntdll.lib(ntdll.dll)因此,我添加了libcmt.lib作为忽略项,并将其放在附加依赖项的开头。这产生了另一个错误,我遵循了相同的步骤。因此,项目属性最终如下所示(ntdll.lib位于附加依赖项的末尾):

我还发现,将/verbose:lib添加到链接器->命令行->的附加选项非常有用,这样您就可以准确地看到正在链接哪些库以及链接的顺序。
https://stackoverflow.com/questions/4794836
复制相似问题