找不到bsearch(vc2008)甚至包含头文件

时间:2014-05-27 09:31:52

标签: c++ c visual-c++ bsearch

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

错误信息是:
error LNK2019: unresolved external symbol __imp__bsearch referenced in function "bool __cdecl is_sync_host

据我所知,bsearch函数包含在头文件" cstdlib"或者" stdlib.h",但即使我包含标题,我也无法找到" bsearch"。

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

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

我尝试将那些被忽略的库添加回来,但后来遇到了很多"符号重新定义"问题,我不认为重命名这些功能是一个适用的解决方案。

我找到了解决办法(将bsearch替换为std::binary_search),但我想知道为什么以及如何正确解决这个问题(编译器怎样才能找到bsearch ?)。感谢。

1 个答案:

答案 0 :(得分:1)

error LNK2019:

这是链接器错误。您的代码已编译就好(.c> .o),链接可以解决您的问题(.o> .exe)。

  

忽略的libs:“msvcrt.lib; msvcrtd.lib; libcmt.lib; libc.lib”

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

问题是,为什么?对于编写良好的代码来说,没有理由(我能想到)明确忽略标准库。

  

我尝试将那些被忽略的库添加回来,但后来我遇到了很多“符号重新定义”的问题......

这让我得出的结论是,您的代码“写得很好”,此时很难在不看代码的情况下提供建议,或者告诉您“放弃它”,这是废话“。 ; - )

  

我认为重命名这些功能并不适用。

如果项目中的函数名为,如标准库函数,除非您的项目 是标准库,否则它们的名称不正确且应该被重命名。

但是在这一点上,我会真的喜欢看到有问题的代码来弄清楚原始程序员可能会想到的......