【问题标题】:Can not find bsearch(vc2008) even include the header file找不到 bsearch(vc2008) 甚至包含头文件
【发布时间】:2014-05-27 09:31:51
【问题描述】:

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

错误信息是:
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?)。谢谢。

【问题讨论】:

  • 可能是 CRT 不匹配造成的,您有仔细检查过吗?
  • 根据this,还需要包含search.h。虽然这不太可能解决库问题。

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


【解决方案1】:
error LNK2019:

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

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

这表示代码忽略了C标准库,难怪找不到标准的bsearch()函数...

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

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

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

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

如果您的项目中有函数被命名为类似于标准库函数,除非您的项目标准库,否则它们会被错误命名并且应该 em> 被重命名。

但在这一点上,我真的想看看有问题的代码,以弄清楚最初的程序员可能会想到什么......

【讨论】:

  • 说实话,我也想知道原因
  • @user3518786:我可以理解,但这需要代码检查,即比您在问题中提供的更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多