首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误LNK2005:_sprintf已在ntdll.lib(ntdll.dll)中定义

错误LNK2005:_sprintf已在ntdll.lib(ntdll.dll)中定义
EN

Stack Overflow用户
提问于 2011-01-25 22:46:59
回答 1查看 3.3K关注 0票数 3

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

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

是否可以强制链接器使用crt函数并忽略ntdll符号以消除错误?或者以某种方式解决这个错误。

我知道ZwQueryInformationProcess的文档建议使用动态加载,但它是在我的主项目也链接到的静态库中使用的,而且这在很长一段时间内一直运行良好,所以我不愿更改它。

谢谢。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-26 00:09:47

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

代码语言:javascript
复制
1>libcmt.lib(wcstol.obj) : error LNK2005: _wcstoul already defined in ntdll.lib(ntdll.dll)

因此,我添加了libcmt.lib作为忽略项,并将其放在附加依赖项的开头。这产生了另一个错误,我遵循了相同的步骤。因此,项目属性最终如下所示(ntdll.lib位于附加依赖项的末尾):

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4794836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档