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

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

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

4

1 回答 1

1
error LNK2019:

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

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

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

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

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

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

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

如果您的项目中有函数被命名为标准库函数,除非您的项目标准库,否则它们会被错误命名并重命名。

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

于 2014-05-27T09:38:41.710 回答