gpt4 book ai didi

c++ - 错误 LNK2005 : _sprintf already defined in ntdll. lib(ntdll.dll)

转载 作者:可可西里 更新时间:2023-11-01 09:26:20 24 4
gpt4 key购买 nike

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

ntdll 似乎定义了一些crt 函数。因此,当我链接它并使用运行时库时,我会遇到链接器错误。

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

我知道 ZwQueryInformationProcess 的文档建议动态加载,但它在我的主项目也链接到的静态库中使用,并且这已经运行了很长时间,所以我不想改变它。

谢谢。

我在其他网站上发现了一些关于此的讨论,例如: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 在附加依赖项的末尾):

Project properties screenshot

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com