首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到bsearch(vc2008),甚至无法包含头文件

找不到bsearch(vc2008),甚至无法包含头文件
EN

Stack Overflow用户
提问于 2014-05-27 17:31:52
回答 1查看 206关注 0票数 0

我维护了一个旧项目,遇到了一些链接器错误。

错误消息为:

error LNK2019: unresolved external symbol __imp__bsearch referenced in function "bool __cdecl is_sync_host

据我所知,bsearch函数包含在头文件"cstdlib“或"stdlib.h”中,但即使包含头文件,也找不到"bsearch“。

我怀疑这是因为这个老项目因为符号冲突而忽略了一些库(我也不知道为什么他们更喜欢省略库而不是重命名函数)。

被忽略的库:msvcrt.lib;msvcrtd.lib;libcmt.lib;libc.lib

我试着重新添加那些被忽略的库,但是我遇到了很多“符号重新定义”的问题,我不认为重命名这些函数是一个合适的解决方案。

我找到了一个解决方法(将bsearch替换为std::binary_search),但是我想知道为什么以及如何正确地解决这个问题(为什么编译器找不到bsearch?)。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-05-27 17:38:42

代码语言:javascript
复制
error LNK2019:

这是一个链接器错误。你的代码编译得很好(.c > .o),是链接给你带来了问题(.o > .exe)。

忽略的库:"msvcrt.lib;msvcrtd.lib;libcmt.lib;libc.lib“

这意味着代码忽略了C标准库,所以难怪它找不到标准的bsearch()函数……

问题是,为什么?写得很好的代码根本没有理由(我能想到的)显式地忽略标准库。

我试着重新添加那些被忽略的库,但是我遇到了很多“符号重新定义”的问题……

这让我得出结论,你的代码是而不是“写得很好”,在这一点上,如果不看代码就很难给出建议,或者告诉你“丢掉它,它是垃圾”。;-)

我不认为重命名这些函数是一个合适的解决方案。

如果您的项目中有像标准库函数一样命名为的函数,除非您的项目是标准库,否则它们的名称是错误的,应该重命名。

但在这一点上,我真的很想看看有问题的代码,弄清楚最初的程序员可能是怎么想的……

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

https://stackoverflow.com/questions/23885844

复制
相关文章

相似问题

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